如果匹配模式,则删除该行中的换行符

时间:2014-09-20 00:34:55

标签: awk sed grep tr

假设模式是字符串"爱"

输入

This is some text
Love this or that
He is running like a rabbit

输出

This is some text
Love this or thatHe is running like a rabbit

我注意到sed对于删除换行符非常不愉快,不知道吗?

5 个答案:

答案 0 :(得分:14)

您可以使用:

sed '/^Love/{N;s/\n//;}' love.txt

细节:

/^Love/标识要处理的行,如果您愿意,可以使用/[Ll]ove/代替

N将下一行添加到模式空间。在此命令之后,模式空间包含Love this or that\nHe is running like a rabbit

s/\n//替换换行符

答案 1 :(得分:3)

的Perl:

$ perl -pe 's/^(Love[^\n]*)\n/\1/' file.txt
This is some text
Love this or thatHe is running like a rabbit

或者,如果意图完全集中在\n您可以chomp基于模式:

$ perl -pe 'chomp if /^Love/' file.txt
This is some text
Love this or thatHe is running like a rabbit

答案 2 :(得分:2)

$ awk '/Love/{printf "%s ",$0;next} 1' file
This is some text
Love this or that He is running like a rabbit

说明:

  • /Love/{printf "%s ",$0;next}

    对于包含Love的行,该行将通过printf打印,不会换行。 awk然后从next行重新开始。

  • 1

    对于不包含Love的行,它们会正常打印(使用换行符)。 1命令是awk通常用于打印的神秘简写。

答案 3 :(得分:2)

通过Perl,

$ perl -pe 's/^Love.*\K\n//' file
This is some text
Love this or thatHe is running like a rabbit

\K会丢弃先前匹配的字符。

$ perl -pe '/^Love/ && s/\n//' file
This is some text
Love this or thatHe is running like a rabbit

如果一行以字符串Love开头,则会从该行中删除换行符。

答案 4 :(得分:1)

以下是另一个awk变体:

awk '{ORS=(/Love/?FS:RS)}1' file
This is some text
Love this or that He is running like a rabbi

根据模式

更改ORS

以下是其他awk

awk '{printf "%s%s",$0,(/Love/?FS:RS)}' file
This is some text
Love this or that He is running like a rabbit

如果行中有Love,请使用FS作为分隔符,否则请使用RS

这也应该有用,但要使用第一个。

awk '{printf "%s"(/Love/?FS:RS),$0}' file