我有一個文件的行數超過10000行。我試圖在兩個時間戳之間搜索特定行之間的字符串。Shell腳本用於特定行之間的字符串搜索,時間戳
我正在使用sed命令來實現此目的。
sed -n'1,4133p'filename | sed -n'/'2015-08-12'/,/'2015-09-12'/ p'filename | grep -i「string」
用上面的命令我正在得到想要的結果。上述命令正在考慮整個文件而不是我已經指定的行。
是否有辦法實現這一目標?
請幫
我有一個文件的行數超過10000行。我試圖在兩個時間戳之間搜索特定行之間的字符串。Shell腳本用於特定行之間的字符串搜索,時間戳
我正在使用sed命令來實現此目的。
sed -n'1,4133p'filename | sed -n'/'2015-08-12'/,/'2015-09-12'/ p'filename | grep -i「string」
用上面的命令我正在得到想要的結果。上述命令正在考慮整個文件而不是我已經指定的行。
是否有辦法實現這一目標?
請幫
我認爲這個問題是在這裏:
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"
我試過它沒有工作 –
我實際上認爲第二個'sed'語句的語法對多個單引號很好奇......你可以試試'sed -n'1,4133p'filename | sed -n'/ 2015-08-12 /,/ 2015-09-12/p'| grep -i「string」' – Hambone
現在它正在工作。謝謝 –
任何時候,你發現自己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/
。
對於通過管道連接的兩個「sed」調用使用'filename'是一個麻煩的邀請。只需刪除cmd行中的第二個'filename'即可。沒有幫助嗎?祝你好運。 – shellter