假设我有 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'
    

    09-09 19:13