因此,例如,sed單行刪除所有單行換行符?
A paragraph's newlines would be removed let's say
it contained only single
newlines.
然後的事情我會想跳過了:
However.
Our previous pair of newlines wouldn't.
因此,例如,sed單行刪除所有單行換行符?
A paragraph's newlines would be removed let's say
it contained only single
newlines.
然後的事情我會想跳過了:
However.
Our previous pair of newlines wouldn't.
這不是一個的sed解決方案 - 雖然你總是可以運行任何的sed通過S2P當然 - 但一個非常簡單的解決方案使用perl是:
% perl -i.orig -ne 'print unless /^$/' file1 file2 file3
這已被擴展到任何空白的,否則空行的優勢,如空格和製表:
% perl -i.orig -ne 'print unless /^\s*$/' file1 file2 file3
在具有各種行結尾,像CR或CRLF文件的情況下,你也可以做到這一點,假設你正在運行的Perl 5.10或更高:
% perl -0777 -i.orig -ne 's/\R+/\n/' file1 file2 file3
這將正常化的一個或多個Unicode行分隔符的所有序列爲單個換行符。
如果您的UTF-8文件在其他空行上可能有(例如)U + 00A0 NON-BREAK SPACE,則可以通過使用-CSD告訴perl它們是UTF-8來處理它們命令行開關:
% perl -CSD -i.orig -ne 'print unless /^\s*$/' file1 file2 file3
我真的不清楚您可以通過刪除段落的意思。我想你只是說在一個段落中加入一行。
如果是這樣的 - 如果你想要做的是從段落換行擠,那麼你要做到這一點:
% perl -i.orig -00 -ple 's/\s*\n\s*/ /g' file1 file2 file3
它可能看起來不像它的工作原理,但它:試試吧。
這是一個sed解決方案。
$ sed -n -e '1{${p;b};h;b};/^$/!{H;$!b};x;s/\(.\)\n/\1 /g;p' 5751270.txt
A paragraph would be removed let's say it contained only single newlines.
However.
Our previous pair of newlines wouldn't.
你可以試試這個bash腳本
#!/bin/bash
exec 8<"file"
while read -r line <&8
do
if ((${#line} > 0)); then
read -r next <&8
if ((${#next} > 0));then
continue
else
echo "$line"
echo "$next"
fi
fi
done
exec <&8-
只是爲了澄清,你想刪除的第一款新行,但不刪除最後兩個之間的空行? – 2011-04-22 01:06:21
@布萊恩是的,就是這樣。但不幸的是,它遲到了,我犯了一個錯字。抱歉。 – magnetar 2011-04-24 10:33:31