我的sed脚本需要帮助。我有一个XML文件,我必须删除除这些标记中包含的文本之外的所有内容:
<TEXT>......</TEXT>
<HEADLINE>......</HEADLINE>
如何编写sed代码?我知道如何删除除ONE标签中所包含的文本之外的所有内容。
s/.*<TEXT>\(.*\)<\/TEXT>.*/\1/
但是我如何编写许多标签的sed代码?
答案 0 :(得分:1)
您可以将多个命令传递给sed
:
$ echo '<TEXT>Hello</TEXT>
<HEADLINE>there</HEADLINE>' | sed -n 's/.*<TEXT>\(.*\)<\/TEXT>.*/\1/gp; s/.*<HEADLINE>\(.*\)<\/HEADLINE>.*/\1/gp'
Hello
there
但是在将regex应用于类似XML的文件时,你真的应该小心。
答案 1 :(得分:1)
假设您有有效的XML:
sed '/.*<\(TEXT\|HEADLINE\)>\(.*\)<\/\(TEXT\|HEADLINE\)>.*/!d;s//\2/' yourfile.xml
如果您想使用 sed 脚本,请添加以下行:
/.*<\(TEXT\|HEADLINE\)>\(.*\)<\/\(TEXT\|HEADLINE\)>.*/!d;s//\2/
然后运行:
sed -f yourscript.sed < yourfile.xml
答案 2 :(得分:0)
这可能适合你(GNU sed):
sed -r '/<(text|headline)>/I!d;s//&\n/;s/^[^\n]*\n//;:a;/<\//!{$!{N;ba}};s/\n/ /g;s/<\//\n&/;P;D' file
这将删除TEXT
和HEADLINE
标记之间的所有文本接受,并在多行值上用空格替换换行符。