shell 字符串出现的行数

来源:互联网 发布:3000块淘宝高佣金软件 编辑:程序博客网 时间:2024/06/14 13:42

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
 
 

我的同类文章

  • PHP操作MongoDB数据库2015-10-27
  • CSS+JS 悬浮固定菜单效果2015-08-22
  • PHP 获取 ping 时间2015-06-30
  • HTML中css和js链接版本号的用途2014-08-29
  • 60行代码:Javascript 写的俄罗斯方块游戏2014-05-21
  • Apache启用GZIP压缩网页传输方法2014-04-27
  • HTML5 标签audio添加网页背景音乐代码2015-09-21
  • PHP 使用 Redis2015-07-25
  • JS和JQuery获取label的值2014-08-30
  • 280行代码:Javascript 写的2048游戏2014-05-31
  • 全端工程师必备技能汇总2014-05-11
更多文章
猜你在找
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 IE10Eclipse CRM JavaScript 数据库 Ubuntu NFC WAP jQuery BI HTML5 Spring Apache .NET API HTML SDK IISFedora XML LBS Unity Splashtop UML components Windows Mobile Rails QEMU KDE Cassandra CloudStack FTCcoremail OPhone CouchBase 云计算 iOS6 Rackspace Web App SpringSide Maemo Compuware 大数据 aptech PerlTornado 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 
    (已满) 
    汇聚百度、小米、微软、腾讯、
    创新工场、阿里巴巴、日本雅虎
0 0