Linux 如何使用sed删除两个模式之间的所有换行符(“\n”)

Linux 如何使用sed删除两个模式之间的所有换行符(“\n”),linux,sed,Linux,Sed,我在研究过程中发现了很多命令,试图删除换行符,但没有任何效果 输入文件: <pattern> blablabla </pattern> 喋喋不休 想要的输出: <pattern>blablabla</pattern> blabla 谢谢你的帮助 Awk可能是更好的选择: awk '/^<pattern>/ { mark=1 } /^<\/pattern>/ { mark=0 } mark==1 { printf

我在研究过程中发现了很多命令,试图删除换行符,但没有任何效果

输入文件:

<pattern>
blablabla
</pattern>

喋喋不休
想要的输出:

<pattern>blablabla</pattern>
blabla

谢谢你的帮助

Awk可能是更好的选择:

 awk '/^<pattern>/ { mark=1 } /^<\/pattern>/ { mark=0 } mark==1 { printf "%s",$0 } mark==0 { printf "%s\n",$0 }' file
awk'/^/{mark=1}/^/{mark=0}mark==1{printf“%s”,$0}mark==0{printf“%s\n”,$0}文件
解释

awk '/^<pattern>/ { 
                    mark=1                # When we see "<pattern>" at the start of the line, set a variable mark to 1
                  } 
     /^<\/pattern>/ { 
                    mark=0                # When we see "</pattern>" at the start of the line, reset the variable mark
                   } 
           mark==1 { 
                    printf "%s",$0        # When mark is one (we are in pattern tags, print the line with no carriage return
                   } 
           mark==0 { 
                    printf "%s\n",$0      # When mark is 0, (we are out of pattern tags), print the line with a carriage return.
                   }' file
awk'/^/{
mark=1#当我们在行首看到“”时,将变量mark设置为1
} 
/^/ { 
mark=0#当我们在行首看到“”时,重置变量标记
} 
标记==1{
printf“%s”,$0#当标记为1时(我们在模式标记中,打印不带回车符的行
} 
标记==0{
printf“%s\n”,$0#当标记为0时,(我们没有模式标记),打印带有回车符的行。
}"档案"
使用sed:

[STEP 101] $ cat file
bla
<pattern>
bla
bla
</pattern>
bla
[STEP 102] $ sed -e '/^<pattern>/!b' -e :a -e 'N;/\n<\/pattern>/!ba' -e 's/\n//g' file
bla
<pattern>blabla</pattern>
bla
[STEP 103] $
[步骤101]$cat文件
布拉
布拉
布拉
布拉
[步骤102]$sed-e'/^/!b'-e:a-e'N;/\N/!ba'-e's/\N//g'文件
布拉
布拉布拉
布拉
[步骤103]$
这可能适合您(GNU-sed):


sed-E'/^]+>/{:a;/]+>).*嗨,Raman,不是所有的文件,只是介于和之间,我添加了一个awk替代方案
sed -E '/^<[^>]+>/{:a;/<([^>]+>).*<\/\1/!{N;ba};s/\n//g}' file