2

我们的应用程序在接收端对 XML 数据进行回溯分析。我们的应用程序没有可用的 Java 或 .NET,但在 Unix 中运行,所以它有 awk 和 Perl。

文件中的 XML 消息包含:

<?xml version="1.0" encoding="ISO-8859-1" ?> 

我在 Perl 和 awk 中尝试了一些选项来删除它们,但无法让它们工作:

perl -p -i -e "s/<?xml version="1.0" encoding="ISO-8859-1" ?>//g"  inputFile
perl -p -i -e "s/<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>//g"  inputFile
perl -p -i -e "s/<\?xml version="1.0" encoding="ISO-8859-1" \?>//g"  inputFile

使用 PERL 或 AWK 来执行此操作的任何其他选项?

4

2 回答 2

1

如果您的文件是 XML,则不必匹配整个字符串。<?xml version足够的。

尝试:

sed -i '/<\?xml version/d' file

测试

kent$  echo '<?xml version="1.0" encoding="ISO-8859-1" ?> 
foo
bar
xyz
hello
there'|sed '/<\?xml version/d' 
foo
bar
xyz
hello
there
于 2012-10-09T14:17:56.767 回答
1

这对我有用而不会覆盖数据文件:

perl -p -e 's/<\?xml version="1.0" encoding="ISO-8859-1" \?>//g'

-i只有当我确定基本的正则表达式正常工作而不会造成损坏时,我才会覆盖文件 ( )。

于 2012-10-09T15:08:14.407 回答