人生是一种无法抗拒的前进

鸟哥的linux私房菜之grep\sed\printf

上一篇 / 下一篇  2011-11-08 15:26:46

grep
1. grep -n 'the' regular_express.txt 显示regular_express.txt中有the的行,显示时加行号
2. grep -vn 'the' regular_express.txt 显示regular_express.txt中没有the的行,显示时加行号
3. grep -in 'the' regular_express.txt 不区分the的大小写
4. grep -n 't[ae]st' regular_express.txt  查找t?st的单词,[]内不管有几个字符,都表示“一个”
5. grep -n 'oo' regular_express.txt 显示匹配到“oo”的行
6. grep -n '[^g]oo' regular_express.txt 显示oo前面不是g的单词所在的行
7. grep -n '[^a-z]oo' regular_express.txt  显示oo前面不是小写字母的   也可以这样写:grep -n '[^[:lower:]]oo' regular_express.txt
8. grep -n '[0-9]' regular_express.txt  取出有数字的那一行  也可以这样写: grep -n '[[:digit:]]' regular_express.txt
9. grep -n '^the' regular_express.txt  行首是the的
10. grep -n '^[a-z]' regular_express.txt  开头是小写字母的行  也可以这样写: grep -n '^[[:lower:]]' regular.txt
11. grep -n '^[^a-zA-Z]' regular_express.txt 不用开头是字母的
12. grep -n '\.$' regular_express.txt 找出以.号结束的行 \.表示.的转义,$表示行尾
13. grep -n '^$' regular_express.txt  找出空白行  ^是行首,$是行尾
14. grep -v '^$' /etc/syslog.conf | grep -v '^#'  去掉空白行和#开头的, -v '^$' 代表不要空白行, -v '^#'代表不要开头是#的那行
15. grep -n 'g..d' regular_express.txt 取出开头是g,结束是d,一共四个字符的单词所在的行
16. grep -n 'ooo*' regular_express.txt 至少两个o以上的字符
17. grep -n 'gl*g' regular_express.txt 开头和结尾都是g的单词所在的行,命令中的l可以为任意字符都OK
18. grep -n '[0-9][0-9]*' regular_express.txt 找出有数字的行,命令等同于grep -n '[0-9]' regular_express.txt 
19. grep -n 'go\{2,5\}g' regular_express.txt  找出两个g之间有2-5个o的字符
20. grep -n 'go\{2,\}g'  regular_express.txt  找出两个g之间有2个以上的o,等同于gooo*g
21. ls | grep -n '^a.*' 找出含有以a开头的档案

sed
1. nl regular_express.txt | sed '2,5d' 列出行号并删除2-5行,可以不要参数-e,但是必须用单引号括起来
2. nl regular_express.txt | sed '3,$d' 列出行号并删除第3行到最后一行
3. nl regular_express.txt | sed '2a hello' 在第2行后面加上hello
4. nl regular_express.txt | sed '2i hello'  在第2行前面加上hello
5. [yangwan.zlz@search041124 ~]$ nl regular_express.txt | sed '2a hello\
> world'  在第2行后面增加两行
6. nl regular_express.txt | sed '2,5c No 2-5 number'  将第2-5行替换成No 2-5 number
7. nl regular_express.txt | sed -n '5,7p'  取出第5-7行,等同于head -n 7 | tail -n 4
8. sed 's/被取代的字符串/新的字符串/g'  取代功能
9. cat regular.txt | grep 'man' 取出man所在的行
10. cat regular.txt | grep 'man' | sed 's/#.*$//g'  删除以#开头的行,以空白行代替
11. cat regular.txt | grep 'man' | sed 's/#.*$//g' | sed '/^$/d'  再删除空白行
12. sed -i 's/\.$/\!/g' regular.txt  将行尾的.替换成!
13. 延伸正则表示法:grep -v '^$' regular.txt | grep -v '^#' 等价于 egrep -v '^$|^#' regular.txt
14. egrep -n 'go+d' regular.txt    o+表示一个以上的o
15. egrep -n 'go?d' regular.txt     o?表示0个或者1个o
16. egrep -n 'gd|good|dog' regular.txt 找出gd或good或dog
17. egrep -n 'g(la|oo)d' regular_express.txt  找出glad或good
18.  echo 'AxyzxyzxyzxyzC' | egrep 'A(xyz)+C'  找出以A开头C结尾,中间有一个或一个以上的xyz

1. printf '%s\t %s\t %s\t %s\t %s\t \n' $(cat printf.txt)  以printf指定的格式输出printf.txt
2. printf '\x45\n'  输出16进制的45对应的字母E
3. last -n 5      取出登录者的前5个
4. last -n 5 | awk '{print $1 "\t" $3}'  打印出第1列和第3列,中间用tab键分开;$0 代表『一整列资料』的意思
5. awk的内建变量:NF 每一行 ($0) 拥有的字段总数 NR 目前 awk 所处理的是『第几行』数据 FS 目前的分隔字符,默认是空格键,使用时且不需要有钱字号 $ 啦
6. [root@www ~]# cat /etc/passwd | \ awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t " $3}'  $3小于10并且输出第1列
7. [root@www ~]# cat pay.txt | \ > awk 'NR==1{printf "%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,"Total" } NR>=2{total = $2 + $3 + $4 printf "%10s %10d %10d %10d %10.2f\n", $1, $2, $3, $4, total}'  >表示enter键
等价于:[root@www ~]# cat pay.txt | \ > awk '{if(NR==1) printf "%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,"Total"} NR>=2{total = $2 + $3 + $4 printf "%10s %10d %10d %10d %10.2f\n", $1, $2, $3, $4, total}'   表示第2行开始每行求和

TAG: grep sed printf

 

评分:0

我来说两句

日历

« 2024-04-14  
 123456
78910111213
14151617181920
21222324252627
282930    

我的存档

数据统计

  • 访问量: 16405
  • 日志数: 11
  • 图片数: 1
  • 建立时间: 2011-11-01
  • 更新时间: 2011-11-29

RSS订阅

Open Toolbar