Я хочу удалить все перед последним пространством в текстовом файле от CLI
Текст в качестве примера:
2015-03-02 21:34:15 20480 dump-2015-03-02-21-34.tar
Строка, которая должна остаться, dump-2015-03-02-21-34.tar
Существует много вариантов использования командной строки:
$ 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
sed
является по умолчанию жадным, поэтому просто удалите все до последнего пространства:
sed 's/.* //'
или используйте это awk
идиома:
awk '$0=$NF'
Попробовать grep
:
echo "2015-03-02 21:34:15 20480 dump-2015-03-02-21-34.tar" | grep -Eo "[^ ]+$"
Можно также использовать tr
и cut
вместе:
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