web-dev-qa-db-fra.com

Supprimer tout le texte avant le dernier espace dans le fichier texte de la CLI

Je veux tout supprimer avant le dernier espace d'un fichier texte de la CLI

Exemple de texte:

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

La chaîne qui doit rester est dump-2015-03-02-21-34.tar

2
mwhite14

Il y a beaucoup de choix en utilisant la ligne de commande:

$ 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
6
Sylvain Pineau

sed est par défaut gourmand, alors supprimez tout jusqu'au dernier espace:

sed 's/.* //'

ou utilisez cette idiome awk:

awk '$0=$NF'
5
Thor

Essayez grep:

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

Vous pouvez également utiliser tr et cut ensemble:

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

Pourquoi devrait-on laisser python derrière:

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

Tous les éléments ci-dessus produisent une sortie: dump-2015-03-02-21-34.tar

4
heemayl