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