grep多次点击一行(bash)

时间:2017-04-19 11:47:29

标签: bash grep full-text-search

我需要在一行中找到多个匹配(使用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”。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

不是大多数智能方式,但可以在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

答案 1 :(得分:1)

使用check=zeros(allsize,1); for l=1:allsize %if [all(l,1) contains a and all(l,2) contains c] or [all(l,1) contains b and all(l,2) contains d] check(l)=1; %end end

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 $&仅使用捕获的组s//$1/
    • 替换匹配的字符串