Text-Processing
如何在文件中字元串的最後 2 次出現後複製 n 行?
在文件中找到字元串的最後 2 次出現之後,有沒有辦法複製前 n 行(比如 3 行)?當我只對上次發生後的那些感興趣時,我使用了:
grep -A4 'stringhere' filein.txt | tail -n 3 >> fileout.txt
但是,我不知道如何重寫此命令來執行字元串最後兩次出現的任務。
即對於包含以下內容的輸入文件:
Text 1 Text 2 Text 3 Text 4 STRINGIMLOOKINGFOR Text 5 Text 6 Text 7 Text 8 Text 9 STRINGIMLOOKINGFOR Text 10 Text 11 Text 12 Text 13 Text 14 STRINGIMLOOKINGFOR Text 15 Text 16 Text 17 Text 18 Text 19
我希望輸出(對於 n = 3)為:
Text 10 Text 11 Text 12 Text 15 Text 16 Text 17
使用 GNU grep:
s="STRINGIMLOOKINGFOR" grep -Poz "$s"'.*(\n.*){3}' file | grep -v "$s" | tail -n 6
文本 10 正文 11 文本 12 正文 15 正文 16 文本 17
使用
awk
:awk '/^PATT$/{for(i=3;i;--i){getline;print}}' file|tail -n6
有了上面,我們正在尋找與 pattern 匹配的整行
PATT
,然後使用getline
接下來tail -n6
以獲得最後 6 行,它們是您的模式的最後 2 行。使用
grep
grep -A3 --no-group-separator '^PATT$' file |grep -v "PATT" |tail -n6
有了上面,我們正在尋找與上面相同的內容並列印出
-A3
接下來的 3 行A找到匹配的模式PATT
後,然後從結果中排除帶有PATT
自身的行並執行相同的尾部。
--no-group-separator
用於grep不列印每組匹配之間的分隔符。