shell命令之grep

1 查询字符串所在的行号

grep  -n  "xxx"   str.txt           #  -n 打印字符 “xxx” 在文件 “str.txt” 所在的行数前缀


示例:

str.txt 

xxx
yyy
zzz
xxx


输入查找命令: grep  -n  "xxx"   str.txt  

结果如下: 

1:xxx
4:xxx

行号1,4在前,匹配字符串“xxx”在后,两者之间用冒号 “:” 隔开


2 查找字符串首次匹配的行号

grep  -n  "xxx"   str.txt  | head -1

结果如下:

1:xxx


同理,查找最后一次匹配的行号

grep  -n  "xxx"   str.txt  | tail -1

结果如下:

4:xxx


查找字符串第二次匹配的行号

 

grep  -n  "xxx"   str.txt  | head -2 | tail -1            # 先取出前两行,然后取最后一行

结果如下:

4:xxx



3 提取字符串所在的行号

grep  -n  "xxx"   str.txt  cut  -d  ":"  -f  1

先查询字符串 “xxx” 所在的全部行号,然后利用 cut 命令分割“:”字符,提取第一个字段,即行号

结果如下:

1
4


提取首次匹配的行号

grep  -n  "xxx"   str.txt  head -1  cut  -d  ":"  -f  1

结果如下:

1


4 比较两次字符串行号变化幅度

两个文件内容: str.txt 和 str2.txt

str.txt

xxx
yyy
zzz
xxx


str2.txt

yyy
xxx
www
zzz


比较行号脚本

catline.sh

 

[html]   view plain  copy  print ?
  1. #!/bin/bash  
  2.   
  3. rm -rf ret.txt  
  4.   
  5. total=`wc -l $1 awk '{print $1}'`  
  6. echo "total $total"  
  7.   
  8. num=1  
  9. while read line  
  10. do  
  11.     echo $line  
  12.   
  13.     ret=`grep -n $line $2 head -1`      
  14.     echo $ret  
  15.   
  16.     if -z $ret ]; then  
  17.         num2=$total  
  18.         echo "null num2 $total"  
  19.     else  
  20.         num2=`echo $ret cut -d ":" -f 1`  
  21.         echo "num2 $num2"  
  22.     fi  
  23.   
  24.     echo $num  
  25.     change=`expr $num2 $num`  
  26.     echo "$num2 $num $change"  
  27.   
  28.     num=`expr $num 1`  
  29.   
  30.     echo "$line=$change" >> ret.txt  
  31. done <</SPAN> $1  
  32.   
  33.   
  34. cat ret.txt  


执行脚本命令:

./catline.sh    str2.txt   str.txt


运行结果如下:

 

[css]   view plain  copy  print ?
  1. total 4  
  2. yyy  
  3. 2:yyy  
  4. num2 2  
  5. 1  
  6. 2 1 1  
  7. xxx  
  8. 1:xxx  
  9. num2 1  
  10. 2  
  11. 1 2 -1  
  12. www  
  13.   
  14. null num2 4  
  15. 3  
  16. 4 3 1  
  17. zzz  
  18. 3:zzz  
  19. num2 3  
  20. 4  
  21. 3 4 -1  
  22. yyy=1  
  23. xxx=-1  
  24. www=1  
  25. zzz=-1  

优秀博文可参考: http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856896.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值