我有一個包含文件:如何用bash中的單個空行替換多個空行?
something
something else
something else again
我需要一個bash命令,SED/grep的我們,將產生以下輸出
something
something else
something else again
換句話說,我需要更換多個空行只有一條空白線。 grep/sed是基於行的。我從來沒有找到可以在多行正則表達式模式下工作的BASH解決方案。
我有一個包含文件:如何用bash中的單個空行替換多個空行?
something
something else
something else again
我需要一個bash命令,SED/grep的我們,將產生以下輸出
something
something else
something else again
換句話說,我需要更換多個空行只有一條空白線。 grep/sed是基於行的。我從來沒有找到可以在多行正則表達式模式下工作的BASH解決方案。
對於BSD衍生系統(包括GNU):
你只需要cat
與-s
選項,這將導致它來除去重複空
cat -s
從手冊頁:從它的輸出線-s --squeeze-blank: suppress repeated empty output lines.
使用Python:
s = file("filename.txt").read()
while "\n\n\n" in s: s = s.replace("\n\n\n", "\n\n")
import sys
sys.stdout.write(s)
這是低效率,而循環 – user5672998 2017-12-15 09:49:45
超級容易做到用vim。只需打開該文件並鍵入以下內容:
:%s/\n\n\n*/\r\r/
這會將所有塊數超過2的新行減少爲2個新行。希望這可以幫助!
其實,如果你有一個換行符替換多個換行符,輸出將是:
something
something else
something else again
你可以做到這一點:
sed /^$/d FILE
這是正確的,很明顯:)什麼OP可能意味着用一個空行代替多個「空白」(注意,這不一定是空的,因爲線可以有不可見的空白空間)(除非它在序列的開頭或結尾)意味着兩個換行符。 – arielf 2016-06-25 20:59:02
我認爲你可能會想刪除只有空格的行。
這是可以做到的:
sed /^[:space:]*$/d FILE
與awk
一個解決方案,用一個空行代替幾個空行:
awk 'BEGIN{bl=0}/^$/{bl++;if(bl==1)print;else next}/^..*$/{bl=0;print}' myfile
+1:偉大的思想家都認爲:P – 2009-05-28 18:43:18
通常情況下,如果我發現SED不能做我需要的東西,我轉向awk:
awk '
BEGIN {
blank = 0;
}
/^[[:blank:]]*$/ {
if (!blank) {
print;
}
blank = 1;
next;
}
{
print;
blank = 0;
}' file
您的解決方案更具可讀性! – mouviciel 2009-05-28 18:45:15
grep -A1 . <yourfile> | grep -v "^--$"
這grep的解決方案的工作假設你要執行以下操作:
輸入
line1
line2
line3
line4
line5
輸出
line1
line2
line3
line4
line5
完美。 謝謝! – 2009-05-28 20:22:50
它流水線操作| uniq的可能的解決方案(如果不是空行等不重複)
如果有人想用perl
perl -00pe0 < file
會做同樣的,因爲cat -s
:)
這對多個文件使用marco's solution:
for i in *; do FILE=$(cat -s "$i"); echo "$FILE" > "$i"; done
我只是sed
解決了這個問題。即使這是一個7歲的問題,有人可能可以在這裏尋求幫助,所以我通過sed
寫我這裏的解決方案:
sed 'N;/^\n$/D;P;D;'
Python中,正則表達式:
import re
import sys
sys.stdout.write(re.sub('\n{2,}','\n\n', sys.stdin.read()))
快速澄清的問題:文件是否有行*不是由空行分隔的行? – biggusjimmus 2009-05-28 18:28:32
你有沒有重複的行不是空白的?如果沒有,你可以使用uniq。 – 2009-05-28 18:38:11
有些行沒有被空行分隔。 可能有重複的行。 – 2009-05-28 20:26:46