如何提取出现多次的字符串?

如何提取出现多次的字符串?

我想从文件中提取所有以“File:”开头并以“.png”结尾的字符串。我正在运行命令

grep -oE 'File.*\.png' list.txt

但是,这只返回一个长字符串,从第一次出现的“File:”开始,到最后一次出现的“.png”结束。我该怎么办?

答案1

您可以从扩展正则表达式(ERE)模式切换到 Perl 兼容正则表达式(PCRE)模式,从而允许您使用非贪婪修饰符?

grep -oP 'File.*?\.png' list.txt

例如懒惰取代贪婪

答案2

一个以 开头File:并以 结尾的长字符串.png似乎是您想要的。
如果您希望将其拆分为不带空格的字符串,请尝试类似

grep -oE 'File:[^s]*\.png' list.txt

当字符串中有空格,但前面只有一个点时png,尝试

grep -oE 'File:[^.]*\.png' list.txt

当你不想使用 Perl 非贪婪 grep 时,你可能会得到帮助

sed 's/\.png/&\n/g' list.txt | grep -oE 'File:.*\.png' 

当您的输入具有像这样的双开始标签时File: and again File: before .png,您首先需要决定您喜欢的输出。

相关内容