grep,sed,awk与简单正则表达式应用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了grep,sed,awk与简单正则表达式应用相关的知识,希望对你有一定的参考价值。
grep,sed,awk与简单正则表达式应用这里使用的测试文件是linux /etc/passwd文件,最好是复制一份进行练习,方式对文件内容造成损坏。感觉还是要多练习才能很好的使用,习题这里就不贴了,网上一找一大把。
grep:
-o 用作计算出现多少次字段
-c 打印符合要求的行数
-n 在输出符合要求的行的同时也打印行号
-v 打印不符合要求的行
-A 后跟一个数字 ps -A2表示打印符合要求的行及下面两行
-B 后跟一个数字 ps -B2表示打印符合要求的行及上面两行
-C 后跟一个数字 ps -C2 表示打印符合要求的行及上下各两行
-r 会把目录下面的所有文件全部遍历
过滤出带有某个关键字的行并且输出行号 grep -n ‘root‘ passwd
过滤出不带有某个关键字的行并且输出行号 grep -n -v ‘root‘ passwd
过滤出所有包含数字的行并且输出行号 grep -n ‘[0-9]‘ passwd
过滤出所有不带有数字的行 grep -n -v ‘[0-9]‘ passwd
去除所有以#号开头的行:grep -n -v ‘^#‘ passwd
去除所有以#号和空行:grep -v ‘^#‘|grep -v ‘^$‘
过滤出以非数字开头的行 grep ‘^[^0-9]‘ 1.txt
过滤出所有以英文字母开头的行 grep ‘[a-zA-Z]‘ passwd
过滤任意一个或多个字符 grep ‘r.o‘ passwd;grep ‘r*t‘ passwd; grep ‘r.*t‘ passwd
^一般表示开头,但是当在[^]时候会表示排除字符)
[^a]表示“匹配除了a的任意字符”。
[^a-zA-Z0-9]表示“找到一个非字母也非数字的字符”。
[\^abc]表示“找到一个插入符或者a或者b或者c”。
[^\^]表示“找到除了插入符外的任意字符。
* 0个或多个*前面的字符
. 任意一个字符(包括多个字符)
? 表示0个或一个?前面的字符
+ 表示一个或多个+前面的字符
.*表示任意字符不限制数量
注意:
+ ? | grep不支持(要使用-E选项),egrep才支持
(oo)* 0个或多个oo
(oo){1,2} 表示大于1次或2次
sed:(-n和p组合,其他不用)
打印指定行sed ‘10p‘ -n passwd; sed ‘1,4p‘ -n passwd; sed ‘5,$p‘ -n 1.txt
打印包含某个字符串的行 sed -n ‘/root/p‘ passwd 可以使用^ . * $
-e 可以实现同时进行多个任务 sed -e ‘/root/p‘ -e ‘/body/p‘ -n passwd
也可以用;隔开 实现 sed ‘/root/p‘; /body/p‘ -n passwd
删除行 sed ‘/root/d’ passwd; sed ‘1d‘ passwd; sed ‘1,10d‘ passwd
替换 sed ‘1,2s/ot/to/g‘ passwd 其中s是替换的意思,g是全局替换,否则只是替换一次,/也可以为#,@等
删除所有的数字 sed ‘s/[0-9]//g‘ passwd
删除所有的非数字 sed ‘/[^0-9]//g‘ passwd
调换2个字符串的位置 head -n2 passwd | sed ‘s/\(root\)\(.*\)\(bash\)/\3\2\1/‘
直接修改文件内容 sed -i ‘s/ot/to/g‘ passwd
sed ‘s/[a-z]/\u&/g‘ passwd将小写字母全局转换为大写字母
sed ‘s/[A-Z]/\l&g‘ passwd 将大写字母全部转换为小写字母
awk:
截取文档中的某段 awk -F ‘:‘ ‘{print $1}‘ passwd
也可以使用自定义字符串连接每个段 awk -F ‘:‘ ‘{print $1"#"$2"#"$3"#"$4}‘ passwd
匹配字符或者字符串 awk ‘/oo/‘ passwd
针对某个段匹配 awk -F ‘:‘ ‘$1~/oo/‘ passwd
多次匹配 awk -F ‘:‘ ‘/root/ {print $1,$3};$1 ~/test/;$3 ~/20/‘ passwd
条件操作符: == > < != >= <=
awk -F ‘:‘ ‘$3==0‘ passwd
awk -F ‘:‘ ‘$3>500‘ passwd
awk -F ‘:‘ ‘$7!="/sbin/nologin"‘ passwd
awk -F ‘:‘ ‘$3<$4‘ passwd
awk -F ‘:‘ ‘$3>$5 && $3<$7‘ passwd
awk -F ‘:‘ ‘$3>$4 || $7="/bin/bash"‘ passwd
awk内置变量 NF(段数) NR(行数)
head -n3 1.txt | awk -F ‘:‘ ‘{print NF}‘
head -n3 1.txt | awk -F ‘:‘ ‘{print $NF}‘ 显示最后一段
head -n3 1.txt | awk -F ‘:‘ ‘{print NR}‘ 显示行数
打印20行之后的行 awk ‘NR>20‘ passwd
awk -F ‘:‘ ‘NR>20 && $1~/ssh/‘ passwd
更改某个字段的值awk -F ‘:‘ ‘$1="root"‘ passwd
数学计算,把第三段和第四段的值相加,并且赋予第七段
awk -F ‘:‘ ‘{$7=$3+$4;print $0}‘ passwd
计算第三段的总和 awk -F ‘:‘ ‘{(tot=tot+$3)}; END {print tot}‘ passwd
awk中也可以使用if关键词 awk -F ‘:‘ ‘{if($1=="root")print $0}‘ passwd
以上是关于grep,sed,awk与简单正则表达式应用的主要内容,如果未能解决你的问题,请参考以下文章
GNU/Linux 正则表达式与三剑侠(grep,sed,awk)(精)
shell脚本应用正则表达式grep,sed,awk,的应用
shell脚本应用正则表达式grep,sed,awk,的应用
linux--补充(管道| / 重定向> / xargs)/find 与xargs结合使用/vi,grep,sed,awk(支持正则表达式的工具程序)