我对正则表达式相当新,所以如果这似乎过于笼统,那么道歉。
情景:
我有一组文件,其中我已经隔离了一个特定的模式,比如[mainpattern]。在每个模式出现时,[mainpattern]前面都有各种[子模式]出现,前面有一个右箭头,后面有一个点:
cat * .txt | grep“mainpattern”
... [>] [subpattern1] [。] [mainpattern] ...
... [>] [subpattern2] [。] [mainpattern] ...
...
... [>] [subpatternN] [。] [mainpattern] ...
我基本上尝试生成一个输出,其中所有子模式都是唯一列出的(没有重复)。有任何想法吗?我无法弄清楚如何编写“从grep输出中获取前面的单词”。
非常感谢
答案 0 :(得分:0)
您可以将PCRE样式的正则表达式(?<=>)[^>.]*(?=[.]mainpattern)
与-oP
选项一起使用(P
用于PCRE,o
用于输出匹配模式):
grep -oP '(?<=>)[^>.]*(?=[.]mainpattern)'
模式匹配:
(?<=>)
- 字符串中以>
[^>.]*
- 匹配零或更多(以匹配1个或多个使用+
)字符而不是>
和.
(?=[.]mainpattern)
- 一个积极的前瞻,要求在消费(前一个)子模式之后出现.
和mainpattern
。答案 1 :(得分:0)
正如@WiktorStribiżew所说,你可以使用正则表达式。
对于uniq列表,您只需添加sort
和uniq
,例如:
pcregrep -o '(?<=>).*?(?=\.mainpattern)' *.txt | sort | uniq