从 CLI 删除文本文件中最后一个空格之前的所有文本

从 CLI 删除文本文件中最后一个空格之前的所有文本

我想从 CLI 中删除文本文件中最后一个空格之前的所有内容

示例文本:

2015-03-02 21:34:15      20480 dump-2015-03-02-21-34.tar

应该保留的字符串是dump-2015-03-02-21-34.tar

答案1

使用命令行有很多选择:

$ echo "2015-03-02 21:34:15      20480 dump-2015-03-02-21-34.tar" | cut -c32-
dump-2015-03-02-21-34.tar

$ echo "2015-03-02 21:34:15      20480 dump-2015-03-02-21-34.tar" | sed 's/.* //'
dump-2015-03-02-21-34.tar

$ echo "2015-03-02 21:34:15      20480 dump-2015-03-02-21-34.tar" | grep -oP "\S+$"
dump-2015-03-02-21-34.tar

$ echo "2015-03-02 21:34:15      20480 dump-2015-03-02-21-34.tar" | awk {'print $NF'}
dump-2015-03-02-21-34.tar

$ echo "2015-03-02 21:34:15      20480 dump-2015-03-02-21-34.tar" | perl -pe 's/.* //'
dump-2015-03-02-21-34.tar

$ echo "2015-03-02 21:34:15      20480 dump-2015-03-02-21-34.tar" | rev | cut -d ' ' -f 1 | rev
dump-2015-03-02-21-34.tar

答案2

sed默认情况下是贪婪的,因此只需删除直到最后一个空格的所有内容:

sed 's/.* //'

或者使用这个awk习语:

awk '$0=$NF'

答案3

尝试grep

echo "2015-03-02 21:34:15      20480 dump-2015-03-02-21-34.tar" | grep -Eo "[^ ]+$"

您还可以将trcut一起使用:

echo "2015-03-02 21:34:15      20480 dump-2015-03-02-21-34.tar" | tr -s ' ' | cut -d' ' -f4

为什么要python落后:

python2 -c 'print "2015-03-02 21:34:15      20480 dump-2015-03-02-21-34.tar".split()[3]'

以上所有操作都会产生输出:dump-2015-03-02-21-34.tar

相关内容