【发布时间】:2014-06-04 05:04:55
【问题描述】:
我已经为此工作了几天,似乎无法弄清楚,希望有人能提供帮助。我更喜欢可以在 linux 命令行中运行的答案,例如 grep、sed、awk 等。
假设我有一个名为“file.txt”的文件,内容如下:
1234jpg.jpg a.jpgbjpgy.jpg uyapss.jpg>"sdf
5678jpg.jpga.jpgbjpgy.jpg uyapss.jpg>"sdf
ABC not this line
我想要做的是将所有内容提取到“.jpg”,这会给我以下结果:
1234jpg.jpg
5678jpg.jpg
我尝试过的一些命令(在数百个其他变体中)是:
cat file.txt | sed 's/\(^.*\.jpg\)/\1/'
cat file.txt | sed -e 's/^[^"jpg"]\(.*\.jpg\)/\1/'
cat file.txt | egrep '^([^jpg]*[jpg])'
cat file.txt | grep -Po '\(\K.*jpg\)'
cat file.txt | grep -Po '(?<=\.jpg).*'
我很乐意为此提供任何帮助。
肖恩
【问题讨论】:
-
你也可以使用
grep。说grep -Po '.*?\.jpg' file.txt -
此命令无效。它使 .jpg 之后的所有内容都在一个新行上,这给了我 8 个 .jpg 文件名,而不是在行开头的 2 个 .jpg 文件名与 .jpg 的第一个匹配项。
-
我没有意识到命令中的锚点丢失了。应该是
grep -Po '^.*?\.jpg' file.txt -
绝对完美!!!
标签: regex linux replace sed grep