shell 字符串出现的行数
1、查询字符串所在的行号
grep -n "xxx" str.txt # -n 打印字符 “xxx” 在文件 “str.txt” 所在的行数前缀
示例:
cat 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
cat str.txt xxx yyy zzz xxx cat str2.txt yyy xxx www zzz
比较行号脚本
catline.sh
#!/bin/bash rm -rf ret.txt total=`wc -l $1 | awk '{print $1}'` echo "total = $total" num=1 while read line do echo $line ret=`grep -n $line $2 | head -1` echo $ret if [ -z $ret ]; then num2=$total echo "null num2 = $total" else num2=`echo $ret | cut -d ":" -f 1` echo "num2 = $num2" fi echo $num change=`expr $num2 - $num` echo "$num2 - $num = $change" num=`expr $num + 1` echo "$line=$change" >> ret.txt done < $1 cat ret.txt
执行脚本命令:
./catline.sh str2.txt str.txt
运行结果如下:
total = 4 yyy 2:yyy num2 = 2 1 2 - 1 = 1 xxx 1:xxx num2 = 1 2 1 - 2 = -1 www null num2 = 4 3 4 - 3 = 1 zzz 3:zzz num2 = 3 4 3 - 4 = -1 yyy=1 xxx=-1 www=1 zzz=-1
参考推荐:
原文: shell字符串出现的行数
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2018-10-30 20:41:09
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!
转载注明: shell 字符串出现的行数 (米扑博客)