我有一个很大的文件目录,我需要在其中查找特定的行,因为它们需要更新。
我正在寻找的格式总是以<topicref开头,然后在那之后,它必须有href>或/祝辞。
到目前为止,我已经提出了一个正则表达式,用于查找我想要的行:pcregrep -HnM '<topicref(.*) href="../(.*).dita(.*)[^>]*'
但是,我在过滤具有scope="peer"的结果时遇到了麻烦。我试着做
pcregrep -HnM '<topicref(.*) href="../(.*).dita(.*)[^>]*' directory | pcregrep - Mv 'scope="peer" > file
但是,这样做的结果将严格显示所有没有'scope="peer"'的行,从以前的pcregrep的总体结果中,所以会有不应该包括的随机结果,而且我也无法跟踪这些结果来自哪些文件。
有没有可能看到所有提到的<topicref href="../... >
而没有scope="peer"
?
三个scope="peer":
的行示例<topicref href="../cat.md" scope="peer"
something />
<topicref href="../cat.md"
something scope="peer"
something />
<topicref href="../cat.md"
scope="peer"
something></topicref><map>
可以使用
pcregrep -HnM '<topicref(?![^>]*sscope="peer")(?:s[^>]+)?shref="../([^"]*).dita[^>]*>' file
细节
<topicref
-一个文字字符串(?![^>]*sscope="peer")
-除>
外,当前位置右边的任何零个或多个字符后不允许有空格+scope="peer"
(?:s[^>]+)?
-一个可选的空白,一个或多个字符,而不是>
shref="../
-空格,href="../
字符串([^"]*)
-组1:除"
以外的零个或多个字符.dita
-.dita
字符串(如果需要匹配.md
,则替换为.md
)[^>]*>
- 0个或多个除>
以外的字符,然后是>
。