linux管道符查看家目录,深入学习Linux之Linux中的管道符 | 和grep,awk,cut命令

学习Linux期间最常用三个命令和一个符号,管道符 | 和grep,awk,cut,并且它们几个经常一起使用,简直就是亲兄弟呀。所以我将他们单独整理

为了让大家更容易的看清楚示例,我将附上测试文件,文件名student.txt。文件里面内容就是如下图所示,之间空隙必须采用Tab键,切记不能使用空格。

bbaa324ad5d6abc1a0060d5f7aeee4ca.png

管道符 |

命令格式:命令A | 命令B,即命令A的正确输出作为命令B的操作对象,这句话可能会很官方

举例说明:

cat student.txt | more

先展示了student.txt中的文件内容,然后more指令再处理这student.txt的内容

grep指令

grep : 筛选某一行的数据

grep -c 字符串 文件名:计算找到搜索字符串的行数

示例:计算带有name字符串的行数

grep -c "name" student.txt

grep -o 字符串 文件名:指出匹配的内容

示例:列出带有zhang的内容,只显示zhang

grep -o "zhang" student.txt

grep -i 字符串 文件名: 不区分大小写

示例:不区分大小写列出

grep -i "what" student.txt

grep -n 字符串 文件名: 显示行号

grep -n "what" student.txt

grep -r 字符串 目录名: 如果要查找的不是文件,而是个目录,需要加-r 否则grep停止工作

grep -r "etc" etc

grep -v 字符串 文件名: 反向选择,不匹配输出的字符串

示例:查看student.txt中除了带有name行不要,其余都要

grep -v "name" student.txt

grep -l 字符串 文件名:列出文件中指定的范本文件名称

grep -l "name" student.xt

color=auto 搜索的关键字显示颜色

cut指令

cut:提取某一列

cut -f 列号:提取第几列

-d 分隔符:按照指定分隔符分割列

例子:提取第三列所有人java成绩

cut -f 3 student.txt

现在举一个例子,cat /etc/paswd 查看用户信息

我们要做的是提取所有的普通用户名,注意,只要用户名,(不包含root用户)

cat /etc/passwd |grep /bin/bash |grep -v root |cut -d ":" -f 1

awk指令

awk简介

awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确拥有自己的语言: AWK 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。

awk 是一种很棒的语言,它适合文本处理和报表生成,其语法较为常见,借鉴了某些语言的一些精华,如 C 语言等。在 linux 系统日常处理工作中,发挥很重要的作用,掌握了 awk将会使你的工作变的高大上。 awk 是三剑客的老大,利剑出鞘,必会不同凡响。

使用方法

awk ‘{pattern + action}’ {filenames}

尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。

awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。

通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。

输出student中的第一列和第四列

awk '{print $1 "\t" $4 "\n"}' student.txt

打印磁盘容量和已用率 第一列和第5列

df -h |awk '{print $1 "\t" $5}'

打印磁盘sdb2的已用率,并且截取掉百分号(用cut截取)

df -h |grep "sdb2" |awk '{print $5 }'|cut -d "%" -f 1

BEGIN关键字:在最开始执行

awk 'BEGIN {print "我是最开始执行的!"} {print %4} ' student.txt

FS:内置变量:可以分割,和(cut -d)差不多一个意思,如下图

例子:打印用户信息,以冒号分割打印第一列和第5列(BEGIN先执行分割)

awk 'BEGIN{FS=":"} {print $1 "\t" $5}' /etc/passwd

1b4bc4d33c07766883cb81a07f52a00a.png

新版本为了简化FS的写法,可以直接用 -F 代替

awk -F ":" '{print $1 "\t" $5}' /etc/passwd

awk -F":" '{ print $1 }' /etc/passwd

awk -F":" '{ print $1 $3 }' /etc/passwd

awk -F":" '{ print $1 " " $3 }' /etc/passwd

awk -F":" '{ print "username: " $1 "\t\tuid:" $3" }' /etc/passwd

awk运算符

d7cbcfc55291515b768528a8e58acf9d.png

awk 赋值运算符:a+5;等价于: a=a+5;其他同类

[root@Gin scripts]# awk 'BEGIN{a=5;a+=5;print a}'

10

awk逻辑运算符:

[root@Gin scripts]# awk 'BEGIN{a=1;b=2;print (a>2&&b>1,a=1||b>1)}'

0 1

awk正则运算符:

[root@Gin scripts]# awk 'BEGIN{a="100testaa";if(a~/100/) {print "ok"}}'

ok

关系运算符:

如: > < 可以作为字符串比较,也可以用作数值比较,关键看操作数如果是字符串就会转换为字符串比较。

两个都为数字 才转为数值比较。字符串比较:按照ascii码顺序比较。

[root@Gin scripts]# awk 'BEGIN{a="11";if(a>=9){print "ok"}}' #无输出

[root@Gin scripts]# awk 'BEGIN{a=11;if(a>=9){print "ok"}}'

ok

[root@Gin scripts]# awk 'BEGIN{a;if(a>=b){print "ok"}}'

ok

awk 算术运算符:

说明,所有用作算术运算符进行操作,操作数自动转为数值,所有非数值都变为0。

[root@Gin scripts]# awk 'BEGIN{a="b";print a++,++a}'

0 2

[root@Gin scripts]# awk 'BEGIN{a="20b4";print a++,++a}'

20 22

这里的a++ , ++a与javascript语言一样:a++是先赋值加++;++a是先++再赋值

三目运算符 ?:

[root@Gin scripts]# awk 'BEGIN{a="b";print a=="b"?"ok":"err"}'

ok

[root@Gin scripts]# awk 'BEGIN{a="b";print a=="c"?"ok":"err"}'

err

判断student.txt中java成绩大于90的学生,请列出姓名

cat student.txt |grep -v name |awk '$3 >= 90 {print $2 }'

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值