Linux基础之正则表达式与文件格式化处理的命令

发布时间:2019-07-24编辑:脚本学堂
本文介绍下,linux中的文件格式化处理的几个命令(grep、sed、awk、diff等),并学习下正则表达式的用法,有需要的朋友参考下。

本节内容:
linux下的正则表达式
Linux下文件格式化处理的命令

1、grep命令
 

cat xxx | grep -n -A3 -B2 'eth' 将xxx文件中包含eth的行,以及它前面的两行,后面的三行都显示出来,并显示行号
搜索特定字符串
grep -n 'the' filename
搜索filename中 含有 the的行,并显示行号
grep -vn 'the' filename
搜索filename中 不含 the的行,并显示行号
grep -in 'the' filename
搜索filename中含有the的行,并显示行号, 不区别大小写
搜索相似字符串
grep -n 't[ae]st' filename
搜索含有tast 或者 test的行
grep -n '[^g]oo' filename
搜索含有oo 且 oo前面 不含有 g的行
grep -n '[^a-z]oo' filename
搜索含有oo 且 oo前面 不含有 小写字母的行
grep -n '[0-9]' filename
搜索 含有数字 的行
搜索行首行尾
grep -n '^the' filename
搜索 行首 出现the的行
grep -n '^[a-z]' filename
搜索 行首 是小写字母 的行
grep -n '^[^a-zA-Z]' filename
搜索 行首 不是字母 的行
grep -n '.$' filename
搜索行尾是.的行
grep -n '^$' filename
搜索空行

由此可以理解^代表行首之前,$代表行尾之后,^$即代表行首行尾间什么都没有,即空行
 

任意一个字符.与任意个字符*
grep -n 'g..d' filename
搜索有g??d模式的行,g..d有且仅有四个字符
grep -n 'ooo*' filename
搜索有两个以上o的行,即前两个o一定存在,最后一个o*表示0到n个o, 千万注意这里的*与通配符里*的不同
grep -n 'g.*d' filename
搜索有g开始,d结尾,中间任意个字符的字符串的行
限定连续字符个数
grep -n 'o{2}' filename
搜索含有两个o字符串的行
grep -n 'go{2,5}g' filename
搜索含有开头g,结尾g,中间2到5个o的字符串的行
grep -n 'go{2,}g' filename
搜索含有开头g,结尾g,中间2个以上o的字符串的行
包含 stra 或者 strb: grep -E 'stra|strb' filename

2 sed
 

增删换显
nl filename | sed '2,5d'
列出filename每一行,并加行号,然后删除2到5行,
删除第2行: '2d'
删除第2行到最后一行: '2,$d'
nl filename | sed '2i this is a new line'
在第2行后增加新行,内容是"this is new line"
nl filename | sed '2a this is new line one > this is new line two'
nl filename | sed '2,5c this is a replace line'
将2到5行替换为"this is a replace line"
nl filename | sed -n '3,5p'
打印3到5行

3 printf
 

复制代码 代码示例:
printf '%st%st%sn' $(cat filename)
printf '%10s %5i %8.2fn' $(cat filename)

4 awk
 

awk '条件类型1{动作1} 条件类型2{动作2}' filename
cat filename | awk '{print $1 "t" $3}'
每一行都要处理,因此无条件类型,动作即为打印第1列,第3列,中间以Tab分隔
cat filename | awk '{print $1 "t lines:" NR "t columns:" NF}'
NR:行数,NF,列数
cat filename | awk 'BEGIN{FS=":"} $3 < 10 {print $1 "t" $3}'
FS是指分割符,$3 < 10是条件,{}内是动作

5 文件对比
diff