grep sed awk 实例

test文本内容:

-------------------------------
12 1 15 18
14 15 14 19
14 11 10 20
11 11 14 19
33 16 14 19
24 18 14 19
50 12 14 19
13 1 1 1.9
55555 asdfg
222 111 333
west123es 2222
loveable oorge
5 5.6 7 8

-------------------------------

#匹配出现4个5以上的行
grep '5\{4\}' test

#匹配出现5个以上小写字母的行
grep '[a-z]\{5\}' test

#在test文件中匹配到west后紧跟任意长度字符后面是元素(es)的行
grep 'w\(es\)t.*\1' test

#删除匹配到12的行
sed '/12/d' test

#替换222为333并只打印替换行
sed -n 's/222/333/p' test

#替换loveable的元素(love)跟rs 并只打印替换行
sed -n 's/\(love\)able/\1rs/p' test

#匹配到19结尾的行的下一行添加"aaa" i\则是添加到该行的上一行
sed '/19$/a\aaa' test

#匹配到55555的行,只替换该行的下一行的222替换成333
sed '/55555/{n;s/222/333/}' test

#删除文件结尾的空行
sed '/^$/{$!N;/^\n*$/d}' test

#每行前面添加行号
awk '{print NR,$0}' test

#只有第2个域匹配浮点数的行,打印该行第2个域
awk '$2~/[0-9]\.[0-9]/{print $2}' test

#匹配到14,并且第3个域的值是等于10的,打印出该行
awk '($0~/14/)&&($3=="10")' test

#BEGIN和END的用法,只在开始和最后读取,匹配过程中不再参与awk的逐行扫描
awk 'BEGIN{x=0}/^$/{x++}END{print "I found " x " blank lines."}' test

#打印10行以后的内容。
awk '{if(NR>10){print $0}}' test

#如果第一个域的长度大于5,则打印该行
awk '{if(length($1)>5)print $0}' test

#匹配到55555的行,找出a在该行的位置
awk '/55555/{print index($0,"a")}' test

#匹配到55555的行,把第2个域的小写换成大写输出,"tolower"是大写换小写。
awk '/55555/{print toupper ($2)}' test

#匹配到55555的行,截取第2个域的第3个字符开始,长度为2的内容
awk '/55555/{print substr($2,3,2)}' test

#匹配到222开头的,把第二个域的111替换成333,也可省略$2则是全行替换
awk '/^222/{gsub(/111/,"333",$2);print}' test

#匹配到222开头的字符串,打印出它在全行中的起始位置以及长度
awk '/^222/{print match($0,/111/),RLENGTH}' test

#读去文件第一行,并打印。
awk 'BEGIN{"cat test"|getline d;print d}'
awk 'BEGIN{"cat test"|getline;print $0}'
awk 'BEGIN{getline<"test";print $0}'

#循环打印所有行的第一个域
awk 'BEGIN{while(getline<"test">0){print $1}}'

你可能感兴趣的:(grep sed awk 实例)