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

Yur*_*kov 2 regex bash shell grep sed

所以我试图在特定模式之后找到一个模式

例如,输入文件将是

/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
Run Code Online (Sandbox Code Playgroud)

然后将输出文件将寻找wav1;;;

使用

grep "wav1" file.txt
Run Code Online (Sandbox Code Playgroud)

我突出显示了所有 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
Run Code Online (Sandbox Code Playgroud)

但是,由于每个文件都以 wav1 开头,因此我无法找到 wav1 之后的位置;;;

如何在模式(';;;')之后找到模式('wav`')

预期输出将是

/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
Run Code Online (Sandbox Code Playgroud)

tri*_*eee 5

轻松搭配grep

grep ';;;.*wav' file.txt
Run Code Online (Sandbox Code Playgroud)

如果你有,grep -P你可以使用花哨的 Perl 正则表达式技巧;以下将仅突出显示实际wav匹配:

grep -P ';;;.*\Kwav' file.txt
Run Code Online (Sandbox Code Playgroud)

如果您只想提取部分后;;;可以使用sed;

sed -n 's/.*;;;//;/wav/p' file.txt
Run Code Online (Sandbox Code Playgroud)

正则表达式通常最好使用单引号,以避免 shell 与正则表达式混淆(双引号较弱,并且不会保护反斜杠、反引号或许多美元符号)。