Why can't I sed two [or more..] empty lines to one empty line? What is the trick?
echo -e "hello\n\n\nhello2" | sed 's/^$\n^$/\n/g'
hello
hello2
The reason your sed
failed is that unless you specify a multi-line operator, it operates on the stream one line at a time. Multiple beginning of line ^
and end of line $
operators are meaningless when strung together like that if you are only looking at the text one line at a time.
The easist way to collapse multiple blank lines is with cat
. From the man page:
-s, --squeeze-blank
suppress repeated empty output lines
It works like this:
$ echo -e "hello\n\n\nworld" | cat -s
hello
world
If you want to remove the blank lines entirely rather than compressing them, use grep
:
$ echo -e "hello\n\n\nworld" | grep -v '^$'
hello
world
Note that if you really want to do this in sed
you have to use complicated expressions and actions. Here is an example (thanks to fred) that collapses any number of sequencial blanks into a single blank line:
$ echo -e "hello\n\n\nworld" | sed -re '$!N;/^\n$/!P;D'
hello
world
You can see why cat -s
is a good deal easier if collapsing multiple blank lines is all you are after!
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加