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