J'écris une fonction dans zsh
laquelle a une chaîne
"find . -a -print:10"
la :10
pièce doit être coupée à droite. Cela pourrait changer à l’avenir pour devenir :23
ou :77
etc, donc il semble qu’un modèle :[0-9]+
soit nécessaire.
aussi, la chaîne pourrait avoir la forme
find . -a -print
Dans ce cas, s'il n'y a pas de :[0-9]+
motif à la fin, la chaîne doit rester inchangée.
alors
find . -a -print:10
devrait devenirfind . -a -print
etfind . -a -print
devrait rester commefind . -a -print
Ce que j'ai essayé jusqu'à présent
% sed -nr 's/(.*)(:[0-9]+)?/\1/p' <<<'find . -a -print:10'
find . -a -print:10 # ':10' not getting trimmed
Si j'essaye
sed -nr 's/(.*)(:[0-9]+)/\1/p' <<<'find . -a -print:10'
find . -a -print # ':10' getting trimmed GOOD ✔✔
mais la même sed
expression
sed -nr 's/(.*)(:[0-9]+)/\1/p' <<<'find . -a -print'
# no output
Comment puis-je couper cette chaîne?
sed
Ne tue aucune ligne à moins que vous ne le lui disiez.
*
globes correspondent à trop de caractères, c'est-à-dire que si la chaîne devient, find -iname "foo\:bar.txt"
alors le glob '*' dans "${str%:*}"
correspondra bar.txt
. Je suis sûr qu'il y zsh
a des globbing plus sophistiqués (globs étendus) mais je n'ai pas d'expérience avec eux.
string
correspondance correspond à la regex :[0-9]+$
(et si elle met à jour la string
valeur ${string%:*}
)
"${str%:*}"
)?