J'écris une fonction dans zshlaquelle a une chaîne
"find . -a -print:10"
la :10pièce doit être coupée à droite. Cela pourrait changer à l’avenir pour devenir :23ou :77etc, 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:10devrait devenirfind . -a -print
etfind . -a -printdevrait 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 sedexpression
sed -nr 's/(.*)(:[0-9]+)/\1/p' <<<'find . -a -print'
# no output
Comment puis-je couper cette chaîne?
sedNe 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 zsha des globbing plus sophistiqués (globs étendus) mais je n'ai pas d'expérience avec eux.
stringcorrespondance correspond à la regex :[0-9]+$(et si elle met à jour la stringvaleur ${string%:*})
"${str%:*}")?