2016-10-14 35 views
0

我有一個文件的行數超過10000行。我試圖在兩個時間戳之間搜索特定行之間的字符串。Shell腳本用於特定行之間的字符串搜索,時間戳

我正在使用sed命令來實現此目的。

sed -n'1,4133p'filename | sed -n'/'2015-08-12'/,/'2015-09-12'/ p'filename | grep -i「string」

用上面的命令我正在得到想要的結果。上述命令正在考慮整個文件而不是我已經指定的行。

是否有辦法實現這一目標?

請幫

+0

對於通過管道連接的兩個「sed」調用使用'filename'是一個麻煩的邀請。只需刪除cmd行中的第二個'filename'即可。沒有幫助嗎?祝你好運。 – shellter

回答

1

我認爲這個問題是在這裏:

sed -n '1,4133p' filename | sed -n '/'2015-08-12'/, /'2015-09-12'/p' filename | 
                    ^^^ 

你想管你的第一個sed命令的輸出到第二位。你有這種方式,第一個輸出被破壞,並被重新掃描文件取代。

試試這個:

sed -n '1,4133p' filename | sed -n '/'2015-08-12'/, /'2015-09-12'/p' | grep -i "string" 
+0

我試過它沒有工作 –

+0

我實際上認爲第二個'sed'語句的語法對多個單引號很好奇......你可以試試'sed -n'1,4133p'filename | sed -n'/ 2015-08-12 /,/ 2015-09-12/p'| grep -i「string」' – Hambone

+0

現在它正在工作。謝謝 –

1

任何時候,你發現自己SEDS的管道鏈接在一起,裏grep停止,只使用1個awk命令代替:

awk -v IGNORECASE=1 '/2015-08-12/{f=1} f&&/string/; /2015-09-12/||(NR==4133){exit}' file 

以上使用GNU AWK爲IGNORECASE,與其他awk您只需將/string/更改爲tolower($0)~/string/

相關問題