正则表达式(grep、set、awk)简单操作示例(图文)
正则表达式
grep
grep [-cinvABC] 'word' filename
配置 管道 符号 一起使用:
-c 行数
-i 不区分大小写
-n 显示行号
-v 取反
-r 遍历所有子目录
grep –r ‘oracle’ ./grep
-A 后面跟数字,过滤出符合要求的行以及下面n行
-B 同上,过滤出符合要求的行以及上面n行
-C 同上,同时过滤出符合要求的行以及上下各n行
1、grep -n 'root' /etc/passwd
显示etc下passwd文件中含root的数据,并显示行号
2、grep -nv 'nologin' /etc/passwd
显示etc下passwd文件中不含有nologin的数据,并显示行号
3、grep '^#' /etc/inittab
显示etc下inittab文件中以#开头的数据
4、egrep 'o+' /etc/passwd
显示etc下passwd文件中含有一个或者数个o的数据
set
1、sed -n '5'p test.txt
显示文件第五行
2、sed -n '1,5'p test.txt
显示文件一到五行
3、sed -n '1,$'p test.txt
显示文件一到最后一行
4、sed -n ‘/root/’p test.txt :包括root
显示文件中含有root的行
5、sed -n ‘/^1/’p test.txt 以1开头的
显示文件中以1开头的行
6、sed -n '/r..o/'p test.txt
显示文件中含r..o的行
7、sed '1'd test.txt
显示文件中除第一行以外的行数
8、sed '1,3'd test.txt
显示文件中除第一行到第三行以外的行数
9、sed '/oot/'d test.txt
显示文件中没有oot的行
10、sed '1,2s/ot/to/g' test.txt
把文件中一二行的ot都改成to后显示
11、sed 's#ot#to#g' test.txt
把文件中所有ot都改为to后显示
12、sed 's/[0-9]//g' test.txt
不显示文件中数字
13、sed 's/[a-zA-Z]//g' test.txt
不显示文件中字母
14、sed -r 's/(rot)(.*)(bash)/\3\2\1/' test.txt
把文件中字段改为命令中顺序
15、sed 's/^.*$/123&/' test.txt
把文件中每行数据前加123
16、sed -i 's/ot/to/g' test.txt
把文件中的ot全改为to
awk
1、head -n2 test.txt|awk -F ':' '{print $1}'
显示文件中前两行的以:分隔开的第一段数据
2、head -n2 test.txt|awk -F ':' '{print $0}'
显示文件中前两行以:分隔开的整段数据
3、awk -F ':' '{print $1"#"$2"#"$3"#"$4}'
显示文件数据为:更改为#显示
4、awk '/oo/' test.txt
显示文件中含有oo的行
5、awk -F ‘:’ ‘$1 ~/oo/’ test.txt
显示文件中以冒号分隔开的数据中第一段包含oo的
6、awk -F ':' '/root/ {print $1,$3} /test/ {print $1,$3}' test.txt
显示文件中以冒号分隔开的数据中含有root和111的数据的第一段和第三段
7、awk -F ':' '$3=="0"' /etc/passwd
显示文件中以冒号分割开的数据中第三段等于0的数据
8、awk -F ':' '$3>="500"' /etc/passwd
显示文件中以冒号分割开的数据中第三段大于“500”的数据
9、awk -F ':' '$3>=500' /etc/passwd
显示文件中以冒号分割开的数据中第三段大于500的数据
10、awk -F ':' '$7!="/sbin/nologin"' /etc/passwd
显示文件中以冒号分割开的数据中第七段等于"/sbin/nologin"的数据
11、awk -F ':' '$3<$4' /etc/passwd
显示文件中以冒号分割开的数据中第四段大于第三段的数据
12、awk -F ':' '$3>"5" && $3<"7"' /etc/passwd
显示文件中以冒号分割开的数据中第三段大于第五段且第三段小于第七段的数据
13、awk -F ':' '$3>1000 || $7=="/bin/bash"' /etc/passwd
显示文件中以冒号分割开的数据中第三段大于1000且第七段等于"/bin/bash"的数据
14、head -5 /etc/passwd |awk -F ':' '{OFS="#"} {print $1,$3,$4}’
显示文件中前五行以冒号分割开的数据的第一段第三段第四段数据
并将冒号改为#
15、awk -F ':' '{OFS="#"} {if ($3>1000) {print $1,$2,$3,$4}}' /etc/passwd
显示文件中以冒号分割开的数据中第三段大于1000的数据的1到4段数据
并将冒号改为#
16、head -n3 /etc/passwd | awk -F ':' '{print NF}’
显示三行文件中以冒号分割开的数据的NF
17、head -n3 /etc/passwd | awk -F ':' '{print NR}‘
显示三行文件中以冒号分割开的数据的NR
18、awk 'NR>40' /etc/passwd
显示文件中NR大于40的数据
19、awk -F ':' 'NR<20 && $1 ~ /roo/' /etc/passwd
显示文件中以冒号分割开且NR<20且第一段中含有roo的数据
20、head -n 3 /etc/passwd |awk -F ':' '$1="root"‘
显示三行文件第一段为root的文件
21、awk -F ':' '{(tot=tot+$3)}; END {print tot}' /etc/passwd
显示文件中所有以冒号隔开的数据的第三段的和
22、awk -F ':' '{if ($1=="root") {print $0}}' /etc/passwd
显示文件中所有以冒号隔开的且第一段等于root的数据
运用awk实际操作将三个文件内容写入一个文件