我試圖擺脫「的CMU-遙控-Q」運行 它總是此行巴什 - 之後的grep只有線路
tag genre Various
<some track>
現在的下方當前曲目,我需要保持簡單因爲我想將它添加到我的i3欄。
我用
cmus-remote -Q | grep -A 1 "tag genre"
但grep的是 '標籤' 線和下面的線。
我只想要下面的線。
我試圖擺脫「的CMU-遙控-Q」運行 它總是此行巴什 - 之後的grep只有線路
tag genre Various
<some track>
現在的下方當前曲目,我需要保持簡單因爲我想將它添加到我的i3欄。
我用
cmus-remote -Q | grep -A 1 "tag genre"
但grep的是 '標籤' 線和下面的線。
我只想要下面的線。
的行數如果你想使用grep
作爲這個工具,你可以通過添加另一個段您的管道實現它:
cmus-remote -Q | grep -A 1 "tag genre" | grep -v "tag genre"
這將在情況下,你要搜索的字符串是兩行失敗我一排。在這種情況下,如果我們要編寫一些合理的代碼,就必須定義你想要的行爲。
另一種可能是使用像awk
一個工具,它允許更大的compexity在線路選擇:
cmus-remote -Q | awk '/tag genre/ { getline; print }'
此搜索字符串,然後獲取下一行,然後打印。
另一種可能性是獨自做到這在bash:
while read line; do
[[ $line =~ tag\ genre ]] && read line && echo "$line"
done < <(cmus-remote -Q)
這實現相同的功能的awk腳本,只有不使用外部工具都沒有。它可能比awk腳本慢。
我建議用awk:
awk 'seen && seen--; /tag genre/ { seen = 1 }'
seen
是真實的,打印就行了。seen
是真實的,遞減的值,所以它會不再是真實的被打印的行的期望數量後seen
到要被打印隨着sed
:
sed -n '/tag genre/{n;p}'
輸出:
$ cmus-remote -Q | sed -n '/tag genre/{n;p}'
<some track>
什麼只是排除了RE與另一個管? 'cmus-remote -Q | grep -A 1「標籤流派」| grep -v「標籤流派」'?當然,如果RE連續在兩行上,它就會失敗。 – ghoti
如果你的'grep'支持'-P'選項,那麼它很簡單,'grep -oPz'標籤類型。* \ n \ K. *'文件' –