我搜索了一下,但沒有找到解決這個具體情況。給定一個管道輸出任意數量的非空行分隔的單個空白行的組合,是否有一個sed單行(或awk單行或perl單行),將非空行組合成單行,同時保留空行?例如,輸入sed結合由空行分隔的N個文本行?
one
two
three
four
five
six
seven
eight
應該輸出
one two
three four five
six
seven eight
在此先感謝所有誰迴應。
我搜索了一下,但沒有找到解決這個具體情況。給定一個管道輸出任意數量的非空行分隔的單個空白行的組合,是否有一個sed單行(或awk單行或perl單行),將非空行組合成單行,同時保留空行?例如,輸入sed結合由空行分隔的N個文本行?
one
two
three
four
five
six
seven
eight
應該輸出
one two
three four five
six
seven eight
在此先感謝所有誰迴應。
Perl的單行
perl -00 -lpe 'tr/\n/ /'
其中
-00
在空白行分隔段落-l
讀取輸入自動處理結束的行自動換行-p
在處理後打印每個記錄tr/\n/ /'
改變所有換行符爲空格樣品輸入修改,以包括一個以上的連續的空行
$ cat ip.txt
one
two
three
four
five
six
seven
eight
awk
溶液:
$ awk -v RS= -v ORS="\n\n" '{gsub("\n"," "); print}' ip.txt one two three four five six seven eight
爲了保持多個坯件,以及:
$ perl -0777 -pe 's/[^\n]\K\n(?=^[^\n])/ /mgs' ip.txt
one two
three four five
six
seven eight
-0777
將發出聲音整個文件作爲一個字符串,所以不適合,如果輸入文件足夠大,以不適合在存儲器這可能會爲你工作(GNU SED):
sed '/./{:a;N;s/\n\(.\)/ \1/;ta}' file
如果該行不爲空,閱讀下面這行,如果不是用空格替換換行符並重復,否則打印模式空間。如果該行的第一個地方是空的打印空行:這迎合了一個空的第一行,如果不是這種情況,那麼有且只有一個非空行之間的空行:
sed ':a;N;s/\n\(.\)/ \1/;ta' file
是足夠了。
awk
解決方案:如果您不希望在輸出中出現空行,只需將RS設置爲空行,並將ORS設置爲空行,而將ORS設置爲兩行。
awk -v RS= -v ORS="\n\n" '{$1=$1}1' foo.in
one two
three four five
six
seven eight
這與廣告一樣。謝謝! – Leslie