本文共 2959 字,大约阅读时间需要 9 分钟。
一、grep使用
...语法: grep [-cinvABC] 'word' filename-c :打印符合要求的行数
-i :忽略大小写
-n :在输出符合要求的行的同时连同行号一起输出
-v :打印不符合要求的行
-A :后跟一个数字(有无空格都可以),例如 –A2则表示打印符合要求的行以及下面两行
-B :后跟一个数字,例如 –B2 则表示打印符合要求的行以及上面两行
-C :后跟一个数字,例如 –C2 则表示打印符合要求的行以及上下各两行
...grep -n 'root' /etc/passwd过滤出带关键字root的行并输出行号grep -nv 'root' /etc/passwdv是取反的意思过滤出不带关键字root的行并输出行号...grep '^[^a-zA-Z]' test.txt[^]表示不在这个范围内的^代表以后面的开头的...grep -v '^#' /etc/crontab |grep -v '^$'正则中^表示以什么开头的行,^$表示以什么结尾的行'^$'可以表示空行...grep 'r..o' /etc/passwd.代表一个任意字符上例中,就是把符合r与o之间有两个任意字符的行过滤出来...grep 'ooo' /etc/passwdooo表示o或oo或ooo或更多的o,代表任意个...grep '.' /etc/passwd |wc -l'.'表示0个过着多个任意字符空行也包含在内...grep 'o{2}' /etc/passwd过滤出现'oo'的行花括号 { 和 } 的左边都需要加上转义字符 '\',{}里还可以写成{n1,n2}的形式,大于n1小于n2次的,n2可以为空,表示大于等于n1次的...二、sed使用sed -n '2'p /etc/passwdp是print打印的意思单引号内的 '2'表示第几行sed -n '1,$'p /etc/passwd这样表示打印所有的行sed -n '2,4'p /etc/passwd这样表示一个区间,第二行到第四行...sed -n '/root/'p test.txt表示打印含有字符串root的行grep中的 $ . ^ 同样可以使用sed -n '/ooo/'p test.txt...sed -e '1'p -e '/111/'p -n test.txt-e可以实现多个行为打印第一行和包含111的行...sed '1'd test.txtsed '/root/'d test.txtsed '1,3'd test.txt删除某行或包含某字符的行或多行...sed '1,2s/ot/to/g' test.txt用to替换1到2行的ots为替换的意思,g是全局的意思,如果不加 ‘g’ 只换该行中出现的第一个/分隔符也可以换成其他特殊字符如# @等sed '1,3s@to@ot@g' test.txt ...sed 's/[0-9]//g' test.txt替换所有的数字sed -e 's@[1-9]@@g' -e 's/[a-zA-Z]//g' test.txttihua替换所有的数字和字母...sed 's@(rot)(.)(bash)@\3\2\1@' test.txt此题可把rot对应着3,rot与bash中间的字符对应着2,bash对应着1然后把它们按照123的顺序排列出来。例如test.txt原来里的内容为rot:123:bash命令执行后输出bash:123:rot...sed 's/^.$/123&/' test.txt匹配任意字符开头任意字符结尾的行,并把行首字符替换为123加上&不覆盖原行内容.代表任意一个字符,*表示前面字符的任意个...sed -i 's/ro/to/g' test.txt直接修改源文件的内容三、awk的使用
head -n2 /etc/passwd |awk -F ':' '{print $1}'-F 选项的作用是指定分隔符,如果不加-F指定,则以空格或者tab为分隔符,print $1是打印第几个段,$0是打印所有...head -n2 test.txt |awk -F':' '{print $1"#"$2"#"$3"#"$4}'{}里面也可以自定义内容,但是自定义的内容必须加上双引号。...awk '/oo/' 1.txt 匹配字符串...awk -F ':' '$1 ~/oo/' test.txt匹配1段里包含oo的行,其中~就是匹配的意思...awk -F ':' '/root/ {print $1,$3} /test/ {print $1,$3}' /etc/passwd匹配、etc/passwd文件中包含字符串root的行的第一和第三段。...awk -F ':' '$3=="0"' /etc/passwd或awk -F ':' '$3=="0" {print $3}' /etc/passwdp匹配第三段字符串为0的行,如果不加引号 ,则认为是数值为0...awk -F ':' '$3>="500"' /etc/passwdjo结果不如我们所料,因为awk把所有数字都认为字符串处理了...awk常用的变量有:NF :用分隔符分隔后一共有多少段
NR :行数
[root@localhost ~]# head -n3 /etc/passwd | awk -F ':' '{print NF}'777[root@localhost ~]# head -n3 /etc/passwd | awk -F ':' '{print $NF}'/bin/bash/sbin/nologin/sbin/nologinNF 是多少段,而$NF是最后一段的值, 而NR则是行号。...也可以使用行号作为判断条件awk 'NR>20' /etc/passwdawk -F ':' 'NR>20 && $1 ~ /ssh/' /etc/passwd也可以配合段匹配一起使用...head -n 3 /etc/passwd |awk -F ':' '$1="root"'awk可以把段值更改...awk还可以对各个段的值进行数学运算:[root@iz2ze68lretu4tuz8o34amz ~]# cat 2.txt
1:2:31:2:3:4[root@iz2ze68lretu4tuz8o34amz ~]# head -n2 2.txt|awk -F ':' '{$3=$2+$2}'[root@iz2ze68lretu4tuz8o34amz ~]# head -n2 2.txt|awk -F ':' '{$3=$2+$2; print $0}'1 2 41 2 4 4...转载于:https://blog.51cto.com/13670314/2308032