Supprimer le premier mot conditionnellement

Comment puis-je supprimer le premier mot de chaque ligne d’un fichier, s’il contient plusieurs mots?

Fichier:

test test2 test3 test4 test5 test6 test7 

Résultat:

 test2 test3 test5 test6 test7 

En outre, comment puis-je enregistrer seulement le dernier mot du fichier ci-dessus, c.-à-d.

result2:

 test2 test3 test6 test7 

Une solution sed: si la ligne contient un espace, nous soaps qu’il y a plusieurs mots, donc nous supprimons tout jusqu’au premier espace.

 $ sed '/ /s/[^ ]* //' infile test2 test3 test5 test6 test7 

Au contraire, nous vérifions encore un espace; s’il y en a un, on enlève tout jusqu’à et y compris le dernier espace ( .* est gourmand).

 $ sed '/ /s/.* //' infile test2 test3 test6 test7 

Si les mots ne sont pas séparés par des espaces, mais par exemple par des tabs, nous pouvons remplacer toutes les instances d’un espace ci-dessus par [[:blank:]] :

 sed '/[[:blank:]]/s/[^[:blank:]]*[[:blank:]]//' infile 

etc.

Vérifier l’espace / blanc n’est pas ssortingctement nécessaire: s’il n’y en a pas, la substitution ne fait rien, donc

 sed 's/[^ ]* //' infile 

et

 sed 's/.* //' infile 

serait également fonctionner, mais la vérification du blanc exprime plus clairement l’intention, à mon avis.

Pour supprimer le 1er mot de chaque ligne,

 cut -d' ' -f2- fileName 

Pour obtenir le dernier mot de chaque ligne et le sauvegarder dans un nouveau fichier,

 awk '{print $NF}' fileName > newFileName