J'essaie de remplacer une expression à l'aide de SED. La regex fonctionne dans Vim mais pas dans SED. Je remplace le dernier tiret avant le numéro avec une barre oblique si doit revenir p> J'utilise la commande suivante mais Garde la sortie / www / www / nom-nom / 0 à la place p> Qu'est-ce que je fais mal? P> P>
3 Réponses :
Il semble que SED sous OS X commence à compter des rafraîchies à 1. Essayez \ 1 code> au lieu de
\ 0 code> p> p> p> P>
Si j'utilise \ 1, il retourne "\ 1 non défini dans le RE"
OS X / MacOS possède d'anciens outils UNIX. Vous ne pouvez pas utiliser -r code> ce qui signifie que vous devez échapper aux parenthèses.
OS X'S SED utilise -E -E au lieu de -r pour permettre une extension de regex
Vous devez entourer entre parentent les données pour la référencer ultérieurement, et sed code> commence à compter dans 1. Pour récupérer tous les caractères correspondants sans la nécessité de parenthèses, il est utilisé le
et code> symbole.
/www/file-name/1
C'est la bonne réponse. Je n'ai pas remarqué @ user2052491 n'utilisait pas les parenthèses.
Les backslashes avant que les accolades ne soient pas nécessaires, sont-ils?
Vous devez capturer à l'aide de parenthèses avant de pouvoir retourner référence (qui démarrez un Vous pouvez utiliser n'importe quel délimiteur avec \ 1 code>) em>. Essayez
sed -r 's | (. *) - | \ 1 / |' code>:
SED code > SO
/ code> n'est pas le meilleur choix lorsque la substitution contient
/ code>. L'option
-r code> est destinée à la REGEXP étendue de sorte que la parenthèse n'a pas besoin d'être échappée. p> p>