shell 字符串出现的行数

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
 
 

我的同类文章

Script(144)
  • PHP操作MongoDB数据库2015-10-27阅读2125
  • CSS+JS 悬浮固定菜单效果2015-08-22阅读4256
  • PHP 获取 ping 时间2015-06-30阅读2889
  • HTML中css和js链接版本号的用途2014-08-29阅读2983
  • 60行代码:Javascript 写的俄罗斯方块游戏2014-05-21阅读9859
  • Apache启用GZIP压缩网页传输方法2014-04-27阅读8502
  • HTML5 标签audio添加网页背景音乐代码2015-09-21阅读20705
  • PHP 使用 Redis2015-07-25阅读2815
  • JS和JQuery获取label的值2014-08-30阅读5683
  • 280行代码:Javascript 写的2048游戏2014-05-31阅读8154
  • 全端工程师必备技能汇总2014-05-11阅读12750
更多文章
猜你在找
2016高薪Linux培训教程-shell脚本入门及正则表达式 bash shell脚本高级特性详解2 1.16.ARM裸机第十六部分-shell原理和问答机制引入 Photoshop脚本从入门到精通:效率达人必备 bash shell全面深入技巧与实战进阶详解
shell变量的类型 shell变量介绍大全经典 使用 shell 脚本对 Linux 系统和进程资源进行监控 shell变量 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网站的观点或立场
核心技术类目
全部主题  Hadoop  AWS  移动游戏  Java  Android  iOS  Swift  智能硬件  Docker  OpenStack  VPN  Spark  ERP  IE10 Eclipse  CRM  JavaScript  数据库  Ubuntu  NFC  WAP  jQuery  BI  HTML5  Spring  Apache  .NET  API  HTML  SDK  IIS Fedora  XML  LBS  Unity  Splashtop  UML  components  Windows Mobile  Rails  QEMU  KDE  Cassandra  CloudStack  FTC coremail  OPhone  CouchBase  云计算  iOS6  Rackspace  Web App  SpringSide  Maemo  Compuware  大数据  aptech  Perl Tornado  Ruby  Hibernate  ThinkPHP  HBase  Pure  Solr  Angular  Cloud Foundry  Redis  Scala  Django  Bootstrap
  • 个人资料
 
阳光岛主
 
2
  • 访问:9221820次
  • 积分:76290
  • 等级: 
  • 排名:第11名
  • 原创:678篇
  • 转载:169篇
  • 译文:16篇
  • 评论:2898条
  • 学习经历
中科院、百度、创新工场、小米 
证券从业资格证(2016) 
系统架构设计师(2013) 
软件设计师(2008) 
CSDN创业 专访 

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

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

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

程序人生的平凡生活 
QQ群: 282297696 
(已满) 
汇聚百度、小米、微软、腾讯、
创新工场、阿里巴巴、日本雅虎

你可能感兴趣的:(shell)