在unix中,Regexp未按预期工作
我正在尝试下面的代码,但它不能正常工作。我对REGEX不熟悉。请分享你的想法。提前谢谢 test.xml在unix中,Regexp未按预期工作,regex,xml,pcre,Regex,Xml,Pcre,我正在尝试下面的代码,但它不能正常工作。我对REGEX不熟悉。请分享你的想法。提前谢谢 test.xml <?xml version="1.0"?> <audit> <interfaces> <interface_dtls>ABCD,ABCD 123</interface_dtls> <interface_dtls>TESTING,123 TEST</interface_dtls
<?xml version="1.0"?>
<audit>
<interfaces>
<interface_dtls>ABCD,ABCD 123</interface_dtls>
<interface_dtls>TESTING,123 TEST</interface_dtls>
</interfaces>
</audit>
<?xml version="1.0"?>
<audit>
<interfaces>
<interface_dtls>ABCD,ABCD 123</interface_dtls>
<interface_dtls>TESTING,123 TEST</interface_dtls>
</interfaces>
</audit>
预期的“回声”输出:
由于缺少信息(空格后的信息),我的查询无法按预期工作。使用更推荐的解析选项,因为grep
不是一个XML
感知工具
$ xml_grep 'interface_dtls' file --text_only
ABCD,ABCD 123
TESTING,123 TEST
你也可以使用over在评论中指出的grep
。可能不是最好的方法,但可以一次性调试。要获得正确的功能,请使用任何XML可读命令(例如xmllint
或XML\u grep
)
使用,更推荐的解析选项,因为grep
不是XML
感知工具
$ xml_grep 'interface_dtls' file --text_only
ABCD,ABCD 123
TESTING,123 TEST
你也可以使用over在评论中指出的grep
。可能不是最好的方法,但可以一次性调试。要获得正确的功能,请使用任何XML可读命令(例如xmllint
或XML\u grep
)
另一个答案中提到了
xml\u grep
实用程序。这将使用,它还能够在命令行上验证和修改XML文件:
$ xml sel -t -v '//interface_dtls' -nl data.xml
ABCD,ABCD 123
TESTING,123 TEST
另一个答案中提到了
xml\u grep
实用程序。这将使用,它还能够在命令行上验证和修改XML文件:
$ xml sel -t -v '//interface_dtls' -nl data.xml
ABCD,ABCD 123
TESTING,123 TEST
经过一点研究,我终于解决了这个问题。但这要感谢,也要感谢有帮助的见解 test.xml
<?xml version="1.0"?>
<audit>
<interfaces>
<interface_dtls>ABCD,ABCD 123</interface_dtls>
<interface_dtls>TESTING,123 TEST</interface_dtls>
</interfaces>
</audit>
<?xml version="1.0"?>
<audit>
<interfaces>
<interface_dtls>ABCD,ABCD 123</interface_dtls>
<interface_dtls>TESTING,123 TEST</interface_dtls>
</interfaces>
</audit>
经过一点研究,我终于解决了这个问题。但这要感谢,也要感谢有帮助的见解 test.xml
<?xml version="1.0"?>
<audit>
<interfaces>
<interface_dtls>ABCD,ABCD 123</interface_dtls>
<interface_dtls>TESTING,123 TEST</interface_dtls>
</interfaces>
</audit>
<?xml version="1.0"?>
<audit>
<interfaces>
<interface_dtls>ABCD,ABCD 123</interface_dtls>
<interface_dtls>TESTING,123 TEST</interface_dtls>
</interfaces>
</audit>
无需使用
cat
或进行循环,只需grep-oP'(?)[^@anubhava:晚了几秒钟,你就赢了我!无需使用cat
或进行循环,只需grep-oP'(?)[^@anubhava:晚了几秒钟,你打败了我!谢谢Inian。我尝试了你提到的第一个选项,它在命令行中运行良好。但是我必须使用for循环来构建配置单元查询,并根据中的值从命令行提交…所以我用下面的代码再次尝试,但它不起作用。我是unix脚本新手h me.#!/bin/bash代表grep-oP中的行(?@GokulkrishnaSurapureddy;感谢您的关注,您能用requirement@GokulkrishnaSurapureddy:我提供了一个框架代码供您进一步尝试,我无法按照社区道德规范提供完整的代码。请确保您在发现答案有用时接受答案。谢谢!我将根据我的要求进行修改irement。如果可能的话,你能告诉我当前代码哪里出了问题。提前感谢你的帮助。感谢Inian。我尝试了你提到的第一个选项,它在命令行中运行良好。但是我必须使用for循环来构建配置单元查询,并根据…中的值从命令行提交。因此,我再次尝试使用下面的代码,结果是不工作。我对unix脚本很新,请与我一起公开。“!/bin/bash for line ingrep-oP”(?@GokulkrishnaSurapureddy;感谢您的关注,您能用requirement@GokulkrishnaSurapureddy:我提供了一个框架代码供您进一步尝试,我无法按照社区道德规范提供完整的代码。请确保您在发现答案有用时接受答案。谢谢!我将根据我的要求进行修改irement.如果可能的话,你能告诉我当前代码哪里出了问题吗?提前感谢你的帮助。LPX-00202失败:无法打开“sel”(错误200)@GokulkrishnaSurapureddy在你的系统(Oracle Linux?)上很可能是xml
是一个完全不同的实用程序。请确保您确实安装了XMLStarlet,并且您知道它的主要可执行文件名。如果它名为xml
,则您可能必须提供该可执行文件的完整路径,以便其他xml
实用程序不会运行。@GokulkrishnaSurapureddy,请稍候,您正在运行g这是在命令行上,而不是在数据库客户端或类似的愚蠢的东西中?@GokulkrishnaSurapureddy好,那么请参阅我之前的评论。LPX-00202失败:无法打开“sel”(错误200)@GokulkrishnaSurapureddy可能是系统(Oracle Linux?)上的xml
是一个完全不同的实用程序。请确保您确实安装了XMLStarlet,并且您知道它的主要可执行文件名。如果它名为xml
,则您可能必须提供该可执行文件的完整路径,以便其他xml
实用程序不会运行。@GokulkrishnaSurapureddy,请稍候,您正在运行g这是在命令行上,而不是在数据库客户端或类似的愚蠢的东西上?@GokulkrishnaSurapureddy Good,那么请看我之前的评论。
#!/bin/bash
IFS='$\n'
for line in `cat test.xml | grep -oP "(?<=interface_dtls>)[^<]+" | cut -d '>' -f 2 | cut -d '<' -f 1`; do
echo $line --Displaying line only for debugging purpose
interface_code=$(echo $line | awk -F ',' '{print $1}')
prcdr_cd=$(echo $line | awk -F ',' '{print $2}')
hive -e "select * from table \
where sub_sys_cd='$interface_code' and data_prcdr_desc='$prcdr_cd';"
done
ABCD,ABCD 123
TESTING,123 TEST