我已经做了好几天了,似乎无法弄明白,我希望有人可以提供帮助。我更喜欢可以在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).*'
我很乐意为此提供帮助。
肖恩
答案 0 :(得分:2)
这可能适合你(GNU sed):
sed 's/\(\.jpg\).*/\1/' file
或:
sed -r 's/(\.jpg).*/\1/' file
或:
sed 's/\.jpg.*/.jpg/' file
答案 1 :(得分:1)
试试这个:
$ awk -F"[.]jpg" 'NF>1{print $1".jpg"}' file
1234jpg.jpg
5678jpg.jpg
我们使用.jpg
作为字段分隔符拆分行。我们只选择那些包含多个这样的文件的行并打印第一个元素。我们打印扩展名,以便输出作为您想要的输出返回。