我想从文件中提取所有以“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
,您首先需要决定您喜欢的输出。