簡體   English   中英

grep多次點擊一行(bash)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM