您的位置:首页 > 运维架构 > Shell

shell命令之grep

2016-03-02 13:16 302 查看
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?

#!/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 <</SPAN> $1  

  

  

cat ret.txt  

执行脚本命令:

./catline.sh
   str2.txt  
str.txt

运行结果如下:

 

[css] view
plain copy
 print?

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  

优秀博文可参考:http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856896.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: