2017-04-19 37 views
4

我需要在一行中找到多個命中(使用grep/egrep)。具體而言,作爲一個例子,我需要在文本「Geschehnis und Beispiel und Grund und Ursachen」中找到圍繞單詞「und」的所有單詞。但egrep "\w+ und \w+"只有兩個,不是三個點擊:grep在一行中的多個命中(bash)

$ echo "Geschehnis und Beispiel und Grund und Ursachen" | egrep -o "\w+ und \w+" 
> Geschehnis und Beispiel 
> Grund und Ursachen 

我還需要找到 「Beispiel UND Grund的」。我怎樣才能做到這一點?

+0

,一旦'Beispiel'匹配時,它不能進行再次作爲其一部分匹配另一場比賽..我相當有信心,這不能用egrep來完成......不知道是否可以用PCRE也......也可以添加另一個帶有不匹配部分的示例輸入... – Sundeep

回答

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

隨着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/僅捕獲的組替換匹配的字符串(\w+)
在給定的例子
+0

感謝您的回答,我會更喜歡它,因爲它更短。但是我在德語中使用perl時遇到了問題([äuu])。我想用大寫字母搜索「und」周圍的所有單詞 - 我的MWE中無法識別的內容。 – dia