shell 字符串出现的行数

shell 专栏收录该内容
4 篇文章 0 订阅

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 < $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  


4
0
 
 

我的同类文章

更多文章
猜你在找
2016高薪Linux培训教程-shell脚本入门及正则表达式
bash shell脚本高级特性详解2
1.16.ARM裸机第十六部分-shell原理和问答机制引入
Photoshop脚本从入门到精通:效率达人必备
bash shell全面深入技巧与实战进阶详解
查看评论
2楼  nehc 2013-01-14 15:19发表  [回复]
a.sh (脚本)
b.bin (二进制)
cat a.sh b.bin > c.data

grep -n aaa c.data
1楼  nehc 2013-01-13 11:38发表  [回复]
全是在文本文件中查找,请问怎么在二进制文件查找并输出行号
Re:  deping_chen 2013-01-13 13:35发表  [回复]
回复nehc:二进制文件有行号吗?
Re:  阳光岛主 2013-01-13 12:33发表  [回复]
回复nehc:二进制从什么类型的文件转来的
发表评论
  • 用 户 名:
  • aywb1314
  • 评论内容:
  • 插入代码
  •   
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
  • 个人资料
  •  
    2
    • 访问:9221820次
    • 积分:76290
    • 等级: 
    • 排名:第11名
    • 原创:678篇
    • 转载:169篇
    • 译文:16篇
    • 评论:2898条
  • 学习经历
  • 中科院、百度、创新工场、小米 
    证券从业资格证(2016) 
    系统架构设计师(2013) 
    软件设计师(2008) 
    CSDN创业 专访 

    程序员创业邦 
    QQ群: 239292073 
    青春,每一个有梦想的人 

    资深产品经理人 
    QQ群: 338142405 
    思与行,人人都是产品经理 

    爱脚本,爱技术 
    QQ群: 320296250 
    (已满) 
    python、ruby、awk、shell 

    程序人生的平凡生活 
    QQ群: 282297696 
    (已满) 
    汇聚百度、小米、微软、腾讯、
    创新工场、阿里巴巴、日本雅虎
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值