Comment puis-je supprimer tout le texte après un caractère, dans ce cas un deux-points (":"), dans bash? Puis-je aussi supprimer le côlon? Je ne sais pas comment faire.
147
Un exemple aurait pu être utile, mais si je vous ai bien compris, cela fonctionnerait:
echo "Hello: world" | cut -f1 -d":"
Cela convertira "bonjour: monde" en "bonjour".
cut
fonctionne, mais la réponse de Dennis est meilleure et plus flexible. Est-ce que quelqu'un sait si cela engendre un nouveau processus commecut
?basename
etcut
, voir la réponse de Dennis cicut
peut lire à partir de stdin, c'est donc mieux, surtout lorsque vous avez une très longue chaîne à traiter, comme le contenu d'un fichier.hello: world
. C'est une demi-réponse.Dans Bash (et ksh, zsh, tiret, etc.), vous pouvez utiliser l'expansion des paramètres avec
%
laquelle supprimera les caractères de la fin de la chaîne ou#
qui supprimera les caractères du début de la chaîne. Si vous utilisez un seul de ces caractères, la plus petite chaîne correspondante sera supprimée. Si vous doublez le caractère, le plus long sera supprimé.la source
hello:world
le deviendrahello:wo
en utilisant${a%:*}
?"${a##*:}"
pour obtenir seulementtomorrow
=)a='hello:world:of:tomorrow'; pattern=''^([^:]*:).*$'
; [[$ a = ~ $ motif]]; echo "$ {BASH_REMATCH [1]}" `. Cela ne correspond que s'il y a un signe deux-points. Si vous voulez que ce soit facultatif, un modèle différent devrait être utilisé. Une explication des expressions rationnelles Bash (et des expressions rationnelles en général) dépasse le cadre de ces commentaires. Vous pouvez trouver d'autres questions qui en discutent ou publier les vôtres.la source
la source
egrep
est grep avec-E
. Cela ne fait aucune différence ici du réguliergrep
.-o
demande à grep de n'imprimer que la partie de la ligne qui correspond à l'expression.^
ancre la correspondance au début d'une ligne.[^:]*
correspond à zéro ou plusieurs caractères qui ne sont pas le:
caractère.:
correspond au caractère:
.Disons que vous avez un chemin avec un fichier dans ce format:
Maintenant, vous ne voulez que le chemin qui comprend quatre "/". Type
et votre sortie sera
L'avantage d'utiliser cut est que vous pouvez également découper le répertoire le plus haut ainsi que le fichier (dans cet exemple), donc si vous tapez
votre sortie serait
Bien que vous puissiez faire la même chose de l'autre côté de la chaîne, cela n'aurait pas beaucoup de sens dans ce cas que de taper
résulte en
Dans certains autres cas, le dernier cas peut également être utile. Notez qu'il n'y a pas de "/" au début de la dernière sortie.
la source
couper tout après la dernière instance de ":"
et si vous vouliez supprimer ce dernier ":"
@ kp123: vous voudriez remplacer
:
par/
(où les deux-points sed devraient être\/
)la source