2017-05-01 25 views
0

我有一個.txt文件,可以打印出成百上千行很多測試結果的文本。在測試開始時,它說如何打印出在bash shell腳本中找到的行並找到後續行?

發射測試:{nameOfTest}。

然後繼續打印出哪個測試通過,哪個失敗。在測試結束時打印出來

====================================== ====== 在0.000秒內3次測試,3次成功,0次失敗

這些是.txt文件中的兩行。我想要打印出發射測試和測試結果。

我知道我可以把txt文件的每一行遍歷像這樣:

cat ~/sample.txt | while read line; do 
    #Then compare "$line" with what I am searching for 

所以,問題是我怎麼搜索線「載」某些字符串,然後打印出來?

喜歡的東西,

if [[ "$line" == *"LAUNCH TEST"* ]]; then 
      echo $line 
      echo "This was the test found" 
    fi 

但出於某種原因,這種比較並不認爲while循環的內部工作。

+1

確實有這樣一個名爲'grep'的工具,您可能需要考慮使用它。 –

+0

你可以發佈你的輸入例子,我們可以看到至少兩場比賽嗎? – RomanPerekhrest

+0

@LarsFischer你有什麼例子嗎? –

回答

0

如果您想打印一個匹配的行以及隨後您可以用awk匹配行:

awk '/LAUNCH TEST/{print $0; flag=1; next} {if (flag) print $0;} /.*/{flag=0} ' ~/sample.txt 

此腳本演示了使用「標誌」變量把印刷的典型AWK成語打開和關閉某些行。請注意使用next命令來防止兩次打印匹配的行。

隨着grep可以使用-A1參數簡單地打印下一行

grep -A1 ~/sample.txt 

然而,grep的將提出一個符合雙破折號在每場比賽之間。你可以通過grep去掉那個,但是運行的可能是可能會消除發生的合法行本身就是一個雙破折號。

+0

如果不需要打印文件名,你可以像這樣建立一個管道:'cat filename | grep -A1「啓動測試」'。然後grep沒有看到'filename',只打印文本。 –