簡體   English   中英

bash sed / grep提取2個單詞之間的文本

[英]bash sed/grep extract text between 2 words

我的問題與這里的問題相同,除了我只希望第一次出現,而忽略其余所有:

如何使用sed / grep提取兩個單詞之間的文本?

在他的示例中是否為:

 input: "Here is a String Here is a String"

但我只關心第一個“是”

echo "Here is a String Here is a String" | grep -Po '(?<=(Here )).*(?= String)' 

輸出:“是一個字符串,這是一個”

grep甚至有可能嗎? 我也可以使用sed來完成這項工作。

謝謝

您的正則表達式恰好與“ Here”和“ String”之間的最長字符串匹配。 也就是說,確實是“ 是字符串,這是字符串 ”。 這是*量詞的默認行為。

$ echo "Here is a String Here is a String" | grep -Po '(?<=(Here )).*(?= String)'
is a String Here is a

如果要匹配最短的字符串,可以輸入? (貪婪修飾符)在*量詞之后:

$ echo "Here is a String Here is a String" | grep -Po '(?<=(Here )).*?(?= String)'
is a
is a

要獲得第一個單詞,可以使用grep -o '^[^ ]*'

echo "Here is a String Here is a String" | grep -Po '(?<=(Here )).*(?= String)' | grep -o '^[^ ]*'

您可以將grep多次傳遞給grep,以將簡單的命令組合成復雜的命令。

sed 's/ String.*//;s/.*Here //'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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