我该如何做到这一点:
TextTextText
start
stuff
stuff
stuff
end
start
stuff
end
TextTextText
看起来像这样:
startstuffstuffstuffend
startstuffend
sed -e '/start/,/end/N; s/\n//'
但它做到了这一点:
startstuff
stuffstuff
endstart
stuff
end
这只是每一行......
答案 0 :(得分:4)
您可以尝试以下命令:
sed -n '/start/,/end/ H; $ { g; s/\n//g; s/\(end\)/\1\n/g; p }' infile
它避免了自动打印(-n
),保留了保留缓冲区(start
)范围end
和H
之间的所有行,并且当整个文件有已处理完毕($
),首先删除所有换行符,然后在每个end
字后添加一个。
它产生:
startstuffstuffstuffend
startstuffend
答案 1 :(得分:0)
您可以使用awk
awk '/start/ {f=1} f {printf $1} /end/ {f=0;print ""}' file
startstuffstuffstuffend
startstuffend
或者你可以做到
awk '/start/,/end/ {printf $1;if ($0~/end/) print ""}' file
startstuffstuffstuffend
startstuffend
答案 2 :(得分:0)
sed '/start/
{
: again
N
s/End$/&/
t clean
b again
: clean
s/\n//g
}
' file
如果没有“结束”但只有一个开头也可以连接,但也许你不想要这个(问题也出现在其他答案中)
答案 3 :(得分:0)
sed -n '/start/{h;:l n;H;/^end$/!bl;x;s/\n//g;p}' input