shell 字符串出现的行数
示例: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":"-f1
先查询字符串 “xxx” 所在的全部行号,然后利用 cut 命令分割“:”字符,提取第一个字段,即行号
结果如下:
1
4
提取首次匹配的行号
grep-n"xxx" str.txt| head -1 | cut-d":"-f1
结果如下:
1
4 比较两次字符串行号变化幅度
两个文件内容: str.txt 和 str2.txt
str.txt
xxx
yyy
zzz
xxx
str2.txt
yyy
xxx
www
zzz
比较行号脚本
catline.sh
view plaincopyprint?http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf
[*] #!/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
运行结果如下:
view plaincopyprint?http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf
[*] 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
页:
[1]