233 votes

Comment puis-je supprimer tout le texte après un caractère en bash ?

Comment puis-je supprimer tout le texte après un caractère, dans ce cas un deux-points (":"), en bash ? Puis-je aussi supprimer le deux-points ? Je n'ai aucune idée de comment faire.

4voto

Couper tout ce qui se trouve après la dernière instance de ":"

grep -o '^.*:' fileListingPathsAndFiles.txt

et si vous voulez supprimer ce dernier ":"

grep -o '^.*:' file.txt | sed 's/:$//'

@kp123: vous voudriez remplacer : par / (où le deux-points sed devrait être \/)

3voto

Nico Feulner Points 64

Supposons que vous avez un chemin avec un fichier dans ce format:

/dirA/dirB/dirC/nom_fichier.fichier

Maintenant, vous voulez seulement le chemin qui comprend quatre "/". Tapez

$ echo "/dirA/dirB/dirC/nom_fichier.fichier" | cut -f1-4 -d"/"

et votre sortie sera

/dirA/dirB/dirC

L'avantage d'utiliser cut est que vous pouvez également couper le répertoire le plus élevé ainsi que le fichier (dans cet exemple), donc si vous tapez

$ echo "/dirA/dirB/dirC/nom_fichier.fichier" | cut -f1-3 -d"/"

votre sortie serait

/dirA/dirB

Vous pouvez également faire la même chose depuis l'autre côté de la chaîne, mais cela n'aurait pas beaucoup de sens dans ce cas car en tapant

$ echo "/dirA/dirB/dirC/nom_fichier.fichier" | cut -f2-4 -d"/"

le résultat sera

dirA/dirB/dirC

Dans d'autres cas, le dernier cas pourrait également être utile. Notez qu'il n'y a pas de "/" au début de la dernière sortie.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X