我從一個bash腳本得到以下輸出的bash:的grep與正則表達式
INFOPLIST_FILE = MajorDomo/MajorDomo-Info.plist
,我想只得到用grep路徑(管家/管家-Info.plist中)。換句話說,等號後面的所有內容。任何想法如何做到這一點?
我從一個bash腳本得到以下輸出的bash:的grep與正則表達式
INFOPLIST_FILE = MajorDomo/MajorDomo-Info.plist
,我想只得到用grep路徑(管家/管家-Info.plist中)。換句話說,等號後面的所有內容。任何想法如何做到這一點?
此作業套房更AWK:
s='INFOPLIST_FILE = MajorDomo/MajorDomo-Info.plist'
awk -F' *= *' '{print $2}' <<< "$s"
MajorDomo/MajorDomo-Info.plist
如果你真的想grep
然後使用grep -P
:
grep -oP ' = \K.+' <<< "$s"
MajorDomo/MajorDomo-Info.plist
您可以通過使用awk ... <<<「$ s」'而不是'echo「$ s」|來輕鬆_slightly_關於bash的問題。 awk'。 :) –
......值得注意的是,'grep -P'非常非常標準,並且在幾個廣泛使用的平臺上不可用(甚至包括一些使用GNU grep的Linux發行版,因爲它不是每個編譯時選項發行版開啓)。 –
這兩個有效的觀點,我寧願awk任何一天都超過grep。 – anubhava
你問的不完全是,但
echo "INFOPLIST_FILE = MajorDomo/MajorDomo-Info.plist" | sed 's/.*= \(.*\)$/\1/'
會做你想要什麼。
謝謝! Althogh,它仍然打印出完整的輸出形式的回聲(INFOPLIST_FILE = MajorDomo/MajorDomo-Info.plist)。 –
這很奇怪 - 它正在爲我工作... – Floris
可能需要'sed -r'來啓用ERE支持。 –
你可以使用cut
還有:
your_script | cut -d = -f 2-
(其中your_script
做一些相當於echo INFOPLIST_FILE = MajorDomo/MajorDomo-Info.plist
)
如果您需要修剪開頭的空間:
your_script | cut -d = -f 2- | cut -d ' ' -f 2-
如果你在一開始多個空格,你要修剪他們都,你將不得不回落到sed的:your_script | cut -d = -f 2- | sed 's/^ *//'
(或者,更簡單,your_script | sed 's/^[^=]*= *//'
)
假設你的腳本輸出一個單一的線,有一個外殼唯一的解決辦法:
line="$(your_script)"
echo "${line#*= }"
+1。因爲這個例子使用的是'key = value'而不是'key = value',所以你在這裏可能會改變的是剝離前導空白。 –
謝謝,編輯。還引用它以防止多個或尾隨空格需要保留。 –
Bash
IFS=' =' read -r _ x <<<"INFOPLIST_FILE = MajorDomo/MajorDomo-Info.plist"
printf "%s\n" "$x"
MajorDomo/MajorDomo-Info.plist
你是說「我希望等號後的所有內容」?你需要'sed',而不是'grep' - 編輯行(不只是選擇它)。 – Floris
是的。等號後的所有內容。 –