Bash正则表达式结束字符串

时间:2016-11-28 15:09:01

标签: regex

文件:

xss.filter.rule.lonely_script_tags2=(?ims)<script(.*?)>
xss.filter.rule.onload=(?ims)onload(.*?)\=
xss.filter.rule.script_fragments=(?i)<script>(.*?)</script>
xss.filter.rule.src=(?ims)[\\s\r\n]+src[\\s\r\n]*\=[\\s\r\n]*'(.*?)'
xss.filter.rule.vbscript=(?i)vbscript\:
tomcat.javaoptions=-Dasdkalslds \
    -agentpath:/opt/hybris/bin/platform/resources/dynatrace/agent/lib64/libdtagent.so=name=hybris-app-1,server=local.com:9998

我使用正则表达式来查找该文件包含如下字符串:

tomcat.javaoptions= *****Any content and Any times/lines*****
-agentpath:/opt/hybris/bin/platform/resources/dynatrace/agent/lib64/libdtagent.so=name=hybris-app-1,server=local.com:9998

CHECK_EXPRESSION="tomcat.javaoptions=(.*\n)*.*agentpath:/opt/hybris/bin/platform/resources/dynatrace/agent/lib64/libdtagent.so=name=hybris.*"

grep -qP "$CHECK_EXPRESSION" /opt/hybris/config/local.properties

但它不适合

tomcat.javaoptions=-Dasdkalslds \
    -agentpath:/opt/hybris/bin/platform/resources/dynatrace/agent/lib64/libdtagent.so=name=hybris-app-1,server=local.com:9998

然而适用于

tomcat.javaoptions=-Dasdkalslds  -agentpath:/opt/hybris/bin/platform/resources/dynatrace/agent/lib64/libdtagent.so=name=hybris-app-1,server=local.com:9998

我想补充一点,在线正则表达式检查器显示我的正则表达式是正常的。但它不适用于grep。可能问题是grep。

2 个答案:

答案 0 :(得分:0)

检查此正则表达式是否匹配。你错过了\(。* \ n)

tomcat.*=.*\s?\-.*\d

演示regex101:https://regex101.com/r/arJOxQ/3

答案 1 :(得分:0)

解决!!!我添加了“z”键。它解决了新行的问题

grep -Pqzo "$CHECK_EXPRESSION" $SPARK_HOME/hybris/config/local.properties

来自man grep

  

-z, - null
  输出零字节(ASCII NUL字符),而不是通常在文件名后面的字符。例如,grep -lZ输出a                 每个文件名后面的零字节,而不是通常的换行符。即使存在文件名,此选项也会使输出明确无误                 包含不正常的字符,如换行符。此选项可用于find -print0,perl -0,sort -z和xargs -0等命令                 处理任意文件名,甚至包含换行符的文件名。