Linux sed,如何删除剩下的单词?

Linux sed, how to delete the rest of the word?

假设我有 text.txt:

342423423423 - 'namefile.jpg' saved (2423423kb/2423423kb)

我可以用

sed 's/^.*- //' text.txt

输出将是:

'namefile.jpg' saved (2423423kb/2423423kb)

它将删除 namefile.jpg 开头的文本,但如果我还想删除其余部分怎么办?我希望输出是这样的:

'namefile.jpg'

我应该使用什么 sed 模式?请注意,在 'namefile.jpg' 之后的文本并不总是相同的。它会不时更改。

只需使用一个简单的cut命令

cut -d ' ' -f3 text.txt

或者你也可以使用这个,

sed 's/^.*- //' text.txt|cut -d ' ' -f1

两者都会给你这个输出:

'namefile.jpg'

您可以使用捕获组。

sed 's/^.*- \([^ ]\+\).*//' text.txt

sed 's/^.*- //;s/ .*//' file
  • ^.*- 正则表达式匹配从开始到 - 的所有字符。第一个命令用空字符串替换所有匹配字符。

  • .* 现在,根据结果字符串,此正则表达式将匹配从第一个 space 到最后一个的所有字符。用空字符串替换这些字符将为您提供所需的输出。

示例:

$ echo "342423423423 - 'namefile.jpg' saved (2423423kb/2423423kb" | sed 's/^.*- \([^ ]\+\).*//'
'namefile.jpg'
$ echo "342423423423 - 'namefile.jpg' saved (2423423kb/2423423kb" | sed 's/^.*- //;s/ .*//'
'namefile.jpg'

或使用 awk:

echo "342423423423 - 'namefile.jpg' saved (2423423kb/2423423kb)" | awk '{print }'

awk 的默认分隔符是 space。只打印第三个字段。

也试试这个方法

sed "s/.*\('.*'\).*//" FileName

输出:

'namefile.jpg'

这不是 sed,而是显示如何使用 awk

awk -F\' '{print }' text.txt
namefile.jpg

或者如果你喜欢单引号。

awk -F\' '{print FSFS}' text.txt
'namefile.jpg'