假设我有 text.txt :
342423423423 - 'namefile.jpg' saved (2423423kb/2423423kb)
我可以用
sed 's/^.*- //' text.txt
输出将是:
'namefile.jpg' saved (2423423kb/2423423kb)
它会删除该
namefile.jpg
开头的文本,但是如果我也想删除其余的文本怎么办?我希望输出是这样的:'namefile.jpg'
我应该使用哪种sed模式?请注意,“namefile.jpg”之后的文本并不总是相同。它不时变化。
最佳答案
您可以使用捕获组。
sed 's/^.*- \([^ ]\+\).*/\1/' text.txt
要么
sed 's/^.*- //;s/ .*//' file
^.*-
regex匹配从开始到-
的所有字符。第一个命令将所有匹配的字符替换为空字符串。 .*
现在,从结果字符串开始,此正则表达式将匹配从第一个空格到最后一个空格的所有字符。用空字符串替换这些字符将为您提供所需的输出。 例:
$ echo "342423423423 - 'namefile.jpg' saved (2423423kb/2423423kb" | sed 's/^.*- \([^ ]\+\).*/\1/'
'namefile.jpg'
$ echo "342423423423 - 'namefile.jpg' saved (2423423kb/2423423kb" | sed 's/^.*- //;s/ .*//'
'namefile.jpg'