shell 字符串出现的行数

来源:互联网 发布:淘宝卖美女的屎 编辑:程序博客网 时间:2024/06/07 21:46

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

#!/bin/bashrm -rf ret.txttotal=`wc -l $1 | awk '{print $1}'`echo "total = $total"num=1while read linedo    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.txtdone < $1cat ret.txt


执行脚本命令:

./catline.sh    str2.txt   str.txt


运行结果如下:

total = 4yyy2:yyynum2 = 212 - 1 = 1xxx1:xxxnum2 = 121 - 2 = -1wwwnull num2 = 434 - 3 = 1zzz3:zzznum2 = 343 - 4 = -1yyy=1xxx=-1www=1zzz=-1


原创粉丝点击