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