J'ai une chaîne séparée par des espaces qui est sortie par une commande, que j'aime diriger vers cut
, en utilisant -fd ' '
pour diviser les espaces. Je sais que je peux utiliser -f <n>
pour afficher le numéro de champ <n>
, mais puis-je le faire afficher le dernier champ si je ne connais pas la longueur de la chaîne?
Ou dois-je utiliser un outil d'édition de texte plus flexible comme sed
ou awk
?
command-line
cut-command
Arronical
la source
la source
-n
fait le n dès le début,n-
est de n à la fin, et il y a l'--complement
option qui inverse la sélection. Mais pas moyen de compter le nombre de champs et d'agir en conséquence pour autant que je sache.Réponses:
Non,
cut
je ne peux pas faire ça. Vous pouvez utiliser deuxrev
commandes, commemais il est généralement plus facile à utiliser
awk
:la source
Vous pouvez le faire en utilisant uniquement un shell, aucun outil externe n'est nécessaire, en utilisant l'extension des paramètres:
var##*
supprimera tout, du démarrage au dernier espace du paramètre (variable)var
.Si le délimiteur peut être n'importe quel espace, par exemple un espace ou une tabulation, utilisez la classe de caractères
[:blank:]
:Exemple:
la source
Personnellement, j'aime la réponse de Florian Diesch. Mais il y a aussi ce chemin.
Explication:
wc -w
donne le nombre de mots. etcut
coupe le dernier motÉDITER:
J'ai imaginé une autre façon de le faire:
la source
a="my string here"
je pourrais aussi utiliser l'extension des paramètres${a##* }
.En voici un qui utilise
grep
Comment ça fonctionne:
-o
Imprime uniquement les parties correspondantes (non vides) d'une ligne correspondante.[^ ]*$
correspond à tout depuis la fin jusqu'à ce qu'elle trouve un espace.Un autre paquebot de Glenn Jackman utilisant Perl
la source