Bash 如何使用sed在后面的多行字符串中添加搜索模式?
我将此文本存档:Bash 如何使用sed在后面的多行字符串中添加搜索模式?,bash,awk,sed,Bash,Awk,Sed,我将此文本存档: <TAG-ONE> multi line text <TAG-TWO> multi line text multi 线 文本 多种 线 文本 我想得到它: <TAG-ONE> multi line text </TAG-ONE> <TAG-TWO> multi line text </TAG-TWO> multi 线 文本 多种 线 文本 请帮我结束这种模式: sed '/^<
<TAG-ONE> multi
line
text
<TAG-TWO> multi
line
text
multi
线
文本
多种
线
文本
我想得到它:
<TAG-ONE> multi
line
text
</TAG-ONE>
<TAG-TWO> multi
line
text
</TAG-TWO>
multi
线
文本
多种
线
文本
请帮我结束这种模式:
sed '/^<[A-Z-]*>/,/^</{s/^<\([A-Z-]*\)>/&\n\1/}'
sed'/^/,/^尽管我不认为使用sed或awk解析类似XML的文件是个好主意,但您可以尝试以下方法:
awk ' /^<.*>/{ if(tag != ""){print tag; }; match($0,"^<(.*)>.*",a); tag= "</" a[1] ">";} {print} END{print tag}' mytextfile
awk'/^/{if(tag!=“”){print tag;};match($0,“^.*”,a);tag=“”;}{print}END{print tag}mytextfile
awk中的match()
函数允许您使用数组a
从字符串中提取正则表达式
if
和END
语句用于捕获文件的开头和结尾。或
awk-v RS=“这可能适合您(GNU-sed):
sed-r'/^.*/&\n需要注意的是,match
的数组参数是一个仅限于gawk的扩展。使用常规awk,您可以按照match($0,“^”);tag=“谢谢awk'/^/{if(tag!=”){print tag;};match($0,“^”);tag“虽然此代码可能会回答问题,但提供有关此代码为什么和/或如何回答问题的附加上下文将显著提高其长期价值。请您的答案添加一些解释。比我的答案更好。我已经做了更多解释。RS
的技巧很好!
sed -r '/^</{:a;x;/./s/^<([^>]*>).*/&\n<\/\1/p;x;h;d};H;$!d;ba' file