簡體   English   中英

Bash 如何在一個模式之后找到一個模式

[英]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.

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