如何在使用sed创建模式之前删除换行符/换行符
标题已经说明: 我想使用一些linux单行程序(例如sed) 转化如何在使用sed创建模式之前删除换行符/换行符,sed,awk,Sed,Awk,标题已经说明: 我想使用一些linux单行程序(例如sed) 转化 Anytext { 进入 这可以使用sed完成吗?如果不使用sed,则使用awk单衬套完成吗?当然 sed 'N;s/\n{/{/' 或者更全面的版本: sed ':r;$!{N;br};s/\n{/{/g' 这里,:r设置了一个标签,我们可以参考该标签来创建循环 $!{…}对除最后一行以外的每一行执行给定的命令集 N;br是在循环中执行的两个命令:N向模式空间追加新行,br分支回到标签r,完成循环 然后,在运行最后一个命
Anytext
{
进入
这可以使用sed完成吗?如果不使用sed,则使用awk单衬套完成吗?当然
sed 'N;s/\n{/{/'
或者更全面的版本:
sed ':r;$!{N;br};s/\n{/{/g'
这里,:r
设置了一个标签,我们可以参考该标签来创建循环
$!{…}
对除最后一行以外的每一行执行给定的命令集
N;br
是在循环中执行的两个命令:N
向模式空间追加新行,br
分支回到标签r
,完成循环
然后,在运行最后一个命令时,所有文件都位于模式空间中:
s/\n{/{/g
如果您在类似的情况下尝试,您可以看到这两种方法之间的差异
Anytext
{
{
{
单向使用
sed
:
sed -ne '$! N; /^.*\n{/ { s/\n//; p; b }; $ { p; q }; P; D' infile
测试。假设infle
包含内容:
one
Anytext
{
two
three
{
four
five
{
输出将是:
one
Anytext{
two
three{
four
five{
如果打算从
\n{
序列中删除换行符bbe
似乎是最简单的工具:
bbe -e 's/\n{/{/' infile
这可能适用于您(GNU-sed):
使用awk
cat file
one
Anytext
{
two
three
{
four
five
{
第一个就足够了,我正在修改C++函数定义,所以这是fine@Martin
N
在模式空间中追加一行,这样模式空间中就有两行用\N
隔开。有关命令列表或更广泛的参考,请参阅手动执行
。非常好的第二次匹配。一个解释会很好。如果您有多个连续的行要删除换行符,那么第二个选项非常有用。@AnnevanRossum谢谢。我添加了一个简短的解释,希望有帮助。回答非常好。以前从未听说过bbe,它似乎不是标准发行版的一部分(至少在Ubuntu下)并且需要单独下载。虽然看起来很有用。它已经成为Debian的一部分一段时间了,并且生活在。我已经发现了它的一些用途,例如在二进制流中查找标记并在它们之间保存数据。
sed ':a;$!{N;/.*\n{/ba};s/\n{/{/g;P;D' file
cat file
one
Anytext
{
two
three
{
four
five
{
awk '{printf (!/^{/&&NR>1?RS:x)"%s",$0} END {print ""}' file
one
Anytext{
two
three{
four
five{