我使用的命令:
grep -oP '(?s)opentag.*?myString.*?closetag' myFile
当在标签之间找到文本'myString'时,这工作正常。 对于这种情况:
opentag
myString
closetag
结果是:
myString
但是当找不到'myString'时,grep会考虑下一个'closetag'。例如:
opentag
closetag
myString
closetag
结果是:
closetag
myString
有没有办法在第一次“closetab”读取时停止解析? 在这种情况下,不会有任何结果。
我可以通过编码解析器而不是时间和动机来实现。
感谢您的帮助!
答案 0 :(得分:2)
您可以在此处使用negative lookahead
。
(?s)opentag((?!(?:open|close)tag).)*myString((?!(?:open|close)tag).)*closetag
参见演示。
答案 1 :(得分:1)
好悲伤,只需使用带有标志的awk来指示你何时进入开/关区块:
awk '/opentag/{f=1} f&&/myString/; /closetag/{f=0}' file
举例:
$ cat file1
opentag
myString
closetag
$
$ awk '/opentag/{f=1} f&&/myString/; /closetag/{f=0}' file1
myString
$
$ cat file2
opentag
closetag
myString
closetag
$
$ awk '/opentag/{f=1} f&&/myString/; /closetag/{f=0}' file2
$
当说明一个简单的问题时,它应该是一个简单的问题需要解决!