[英]grep multiple hits in one line (bash)
我需要在一行中找到多个匹配(使用grep / egrep)。 具体来说,作为一个例子,我需要在文本“Geschehnis und Beispiel und Grund und Ursachen”中找到围绕“und”一词的所有单词。 但egrep "\\w+ und \\w+"
只有两个,而不是三个点击:
$ echo "Geschehnis und Beispiel und Grund und Ursachen" | egrep -o "\w+ und \w+"
> Geschehnis und Beispiel
> Grund und Ursachen
我还需要找到“Beispiel und Grund”。 我怎样才能做到这一点?
不是最智能的方式,但可以用awk
完成。 这个想法是匹配单词und
并在它之前和旁边打印单词。
echo "Geschehnis und Beispiel und Grund und Ursachen" | awk '{for(i=1;i<=NF;i++) { if (match($i,/^und$/)) { print prev,$i,$(i+1) }; prev=$i }}'
产生的输出为
Geschehnis und Beispiel
Beispiel und Grund
Grund und Ursachen
用perl
$ s='Geschehnis und Beispiel und Grund und Ursachen'
$ # can also use: perl -pe 's/(\w+ und )(?=(\w+) )/$1$2\n/g'
$ echo "$s" | perl -lne 'while(/\w+ und (\w+)/){print $&; s//$1/}'
Geschehnis und Beispiel
Beispiel und Grund
Grund und Ursachen
while(/\\w+ und (\\w+)/)
只要输入行与此正则表达式匹配即可
print $&
print整个匹配的字符串 s//$1/
仅用捕获的组替换匹配的字符串(\\w+)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.