使用 sed 从文本文件中提取任意 XML

使用 sed 从文本文件中提取任意 XML

我有一个日志文件,其中包含多个请求 XML 片段。我使用这个 sed 命令来提取并打印请求 XML:

sed -n '/<GetCompensableProductIdentification*/,/<\/GetCompensableProductIdentification>/p' ProductIdentifierService.log

我想使用请求开始和结束标记的变量,以便我可以过滤掉我想要的任何请求。我怎样才能做到这一点?

答案1

这可能对你有帮助,

 sed -n 's,.*<GetCompensableProductIdentification>\(.*\)</GetCompensableProductIdentification>.*,\1,p' input

但我想xmlstarlet对于这种情况来说这是有效的工具,

 xmlstarlet sel -t -v '//GetCompensableProductIdentification' -n

答案2

这个脚本

sed -n '/<GetCompensableProductIdentification>/,/<\/GetCompensableProductIdentification>/p' ProductIdentifierService.log

应该这样做

这里的选项-n 抑制正常输出。因此,只会打印您选择的内容。


要使用变量,您可以使用[ shell 参数替换 ]

start_tag="<GetCompensableProductIdentification>"
end_tag="${start_tag/#</<\\/}"
sed -n "/${start_tag}/,/${end_tag}/p" ProductIdentifierService.log

这会诱惑你写一个脚本

# Script name - xmlparser.sh
#!/usr/bin/env bash
start_tag="$1"
end_tag="${start_tag/#</<\\/}"
if [ -e "$2" ] # Extra check if file exists
then
   sed -n "/${start_tag}/,/${end_tag}/p" "$2"
else
   echo " The file : $2 doesn't exists"
fi

像这样运行脚本

./xmlparser.sh "<GetCompensableProductIdentification>"  "/path/to/log/file"

相关内容