![](/img/trans.png)
[英]How to use sed/grep to extract text between two words with condition?
[英]bash sed/grep extract text between 2 words
我的問題與這里的問題相同,除了我只希望第一次出現,而忽略其余所有:
在他的示例中是否為:
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.