我希望使用sed或awk刪除文件中的空行(新行,製表符和空格),但前提是這些空行位於兩個模式之間。刪除圖案之間的空行
lorem lorem PATTERN1
\t
PATTERN2 lorem2 lorem2`
我期待下面的結果是兩行與兩個模式的連接。
lorem lorem PATTERN1PATTERN2 lorem2 lorem2
我希望使用sed或awk刪除文件中的空行(新行,製表符和空格),但前提是這些空行位於兩個模式之間。刪除圖案之間的空行
lorem lorem PATTERN1
\t
PATTERN2 lorem2 lorem2`
我期待下面的結果是兩行與兩個模式的連接。
lorem lorem PATTERN1PATTERN2 lorem2 lorem2
這可能會爲你工作(GNU SED):
sed -r '/PATTERN1/!b;:a;/PATTERN2/bb;$!{N;ba};:b;s/(PATTERN1.*)[ \t\n]+(.*PATTERN2)/\1\2/;tb' file
/PATTERN1/!b
只打印線,除非它包含了第一圖案:a;/PATTERN2/bb;$!{N;ba}
讀後續行到模式空間(PS ),直到遇到第二個模式:b;s/(PATTERN1.*)[ \t\n]+(.*PATTERN2)/;tb
替換第一個和第二個pat之間的所有空格,製表符和換行符燕鷗。你能解釋這個魔法嗎? – user537723 2013-02-23 21:05:55
@ user537723看到編輯 – potong 2013-02-24 11:34:24
如果你只是想刪除包含包含式樣1和式樣2線之間只有空白行,只是做:
sed '/PATTERN1/,/PATTERN2/{ /^[ \t]*$/d}'
在你給的樣本輸出,看來你也想消除隨後式樣1換行,你想怎麼像對待輸入,但目前還不清楚:
PATTERN1
non-empty-line
PATTERN2
你也不希望如何處理
PATTERN1 non-whitesapce
PATTERN2
也許需要澄清一下這個問題。如果你真的只是想消除pattern1
和pattern2
之間的所有空格,它可能是最容易:
perl -0777 -pe 's/(pattern1)\s*(pattern2)/$1$2/g'
@ user537723:你可以嘗試AWK:
---改善以前的帖子,所以它打印在一模式之間的線---
awk '/PATTERN1/{ORS=x} /PATTERN2/{ORS=RS} ORS || NF' file
改變了我的帖子,所以它現在在一行上... – Scrutinizer 2013-02-26 17:35:32
的GNU AWK相當於@ WilliamPursell的Perl腳本的:
awk -v RS='\0' '{print gensub(/(PATTERN1).*(PATTERN2)/,"\\1\\2","g")}' file
sed「/ PATTERN1 /,/ PATTERN2/d」文件 – user537723 2013-02-23 17:40:22