重击如何在图案之后找到图案

问题描述

所以我想在特定图案之后找到图案

例如输入文件

/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之后寻找;;;

使用

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开头,所以我找不到w ;;;之后的位置。

如何在模式(';;;')之后找到模式('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

解决方法

轻松使用grep;

grep ';;;.*wav' file.txt

如果您有grep -P,则可以使用Perl正则表达式技巧;以下内容只会突出显示实际的wav匹配项:

grep -P ';;;.*\Kwav' file.txt

如果只想提取;;;之后的部分,可以使用sed;

sed -n 's/.*;;;//;/wav/p' file.txt

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

,

对于GNU grep,先匹配;;;,然后匹配任何.*的文本,然后再使用wav1匹配\bwav1\b,以确保您不匹配wav12

grep -P ';;;.*\bwav1\b' yourfile.txt

P选项表示将使用PCRE引擎。

,

我相信

model.addAttribute("ListOfThreeProducts",products);

足够了。