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