我有一个日志文件,其中包含多个请求 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"