[英]Bash how to find a pattern after a pattern
所以我試圖在特定模式之后找到一個模式
例如輸入文件將是
/wav1/af_ZA_IT_001_B.wav;2.98;3.67;;;dáár wav1
/wav1/af_ZA_IT_001_B.wav;2.98;3.67;;;dáár we1
/wav1/af_ZA_IT_001_B.wav;4.05;7.9;;;dit is franko wav1 van niekerk hier en kobus buys kobus
然后 output 文件將在;;;
之后查找wav1
隨着使用
grep "wav1" file.txt
我突出顯示了所有 wav1。
/wav1/af_ZA_IT_001_B.wav;2.98;3.67;;;dáár wav1
/wav1/af_ZA_IT_001_B.wav;2.98;3.67;;;dáár we1
/wav1/af_ZA_IT_001_B.wav;4.05;7.9;;;dit is franko wav1 van niekerk hier en kobus buys kobus
但是,由於每個文件都以 wav1 開頭,因此我無法找到 wav1 在;;;
之后的位置。 .
如何在模式(';;;')之后找到模式('wav`')
預計 output 將是
/wav1/af_ZA_IT_001_B.wav;2.98;3.67;;;dáár wav1
/wav1/af_ZA_IT_001_B.wav;4.05;7.9;;;dit is franko wav1 van niekerk hier en kobus buys kobus
輕松使用grep
;
grep ';;;.*wav' file.txt
如果你有grep -P
你可以使用花哨的 Perl 正則表達式技巧; 以下將僅突出顯示實際的wav
匹配:
grep -P ';;;.*\Kwav' file.txt
如果您只想提取;;;
之后的部分您可以使用sed
;
sed -n 's/.*;;;//;/wav/p' file.txt
單引號通常更適合正則表達式,以避免 shell 與正則表達式混淆(雙引號較弱,不會保護反斜杠、反引號或許多美元符號)。
使用 GNU grep,匹配;;;
,然后是任何帶有.*
的文本,然后使用\bwav1\b
匹配wav1
以確保您不匹配wav12
:
grep -P ';;;.*\bwav1\b' yourfile.txt
P
選項意味着將使用 PCRE 引擎。
我相信
grep -e ";;;.*wav.*" yourfile.txt
就足夠了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.