假设模式是字符串"爱"
输入
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对于删除换行符非常不愉快,不知道吗?
答案 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