这就是我想要做的事情:
在文档中搜索包含RegEx的模式,然后检查这个确切的模式是否在一行内存在两次.
Content of file.xml:
(some code) "testen" (more code) >testete<
(some code) "bleiben" (more code) >bleiben<
(some code) "stehen" (more code) >stand<
(some code) "hängen" (more code) >hängten<
...
Run Code Online (Sandbox Code Playgroud)
现在我想检查.*en并检查(确切)相同的单词是否在该行中出现两次.所以结果应该是:
bleiben
Run Code Online (Sandbox Code Playgroud)
因为Testen!= testete,stehen!= stand,hängen!=hängten
有没有办法做到这一点?
您可以grep使用模式在第一行处理此搜索.*en.*en:
grep .*en.*en your_file
Run Code Online (Sandbox Code Playgroud)
这将只输出en出现两次的行.
如果你需要在两个背靠背中处理它grep,你仍然可以在管道版本中使用相同的命令:
grep .*en your_file | grep .*en.*en
Run Code Online (Sandbox Code Playgroud)
此外,如果您想增加同一行中的实例数,可以利用grep's -P选项并使用Perl正则表达式:
grep -P "(.*en){2}" your_file
Run Code Online (Sandbox Code Playgroud)
有了这个,你可以只改变{2}你希望它出现在一行中的多个实例,它应该可以工作.
编辑(找到两次完全相同的单词的行)
如果没有可以定义单词边界的扩展模式,这很困难 - 而您的示例输出实际上并没有多大帮助.去直来了点例子,我们可以只承担一个"字"是任何字母串a-z一个与结束en.您可以根据需要自定义此边界:
grep -P "([a-z]+en).*\1" your_file
Run Code Online (Sandbox Code Playgroud)
这将打印任何行结尾en的行,该行在行(the \1)的其他位置找到.
值得一提的是,这与上面提到的词边界问题有关.在"bleiben"和"bleiben"的背景下,它们是平等的.然而,在"ben"和"bleiben"的上下文中,该模式也将匹配,因为它将看到从"bleiben"结束"ben"作为匹配模式(从而使用"ben"="ben").如果这是不可接受的,你将不得不建立一个更严格的字边界(即 - 不允许特殊字符?).
| 归档时间: |
|
| 查看次数: |
5590 次 |
| 最近记录: |