如何提取从一行开始到特定字符串的所有内容?

时间:2014-04-19 20:41:37

标签: regex linux replace sed grep

我已经做了好几天了,似乎无法弄明白,我希望有人可以提供帮助。我更喜欢可以在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).*'

我很乐意为此提供帮助。

肖恩

2 个答案:

答案 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作为字段分隔符拆分行。我们只选择那些包含多个这样的文件的行并打印第一个元素。我们打印扩展名,以便输出作为您想要的输出返回。