本文介绍下,linux中的文件格式化处理的几个命令(grep、sed、awk、diff等),并学习下正则表达式的用法。
本节内容:
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 '%s\t%s\t%s\n' $(cat filename)
printf '%10s %5i %8.2f\n' $(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 文件对比 (责任编辑:IT) |