Je veux exécuter une commande simple pour remplacer les chemins absolus par des chemins relatifs dans un fichier CSS comme ceci:
sed -i 's/\/fonts/../fonts/' /Users/sergeybasharov/WebstormProjects/snap/compiled/Content/stylesheets/style.css
Ça jette ça
sed: 1: "/Users/sergeybasharov/W ...": bad flag in substitute command: 'b'
Quel peut être le problème dans ce script simple?
Dans votre commande s/\/fonts/../fonts/
est pris comme paramètre pour le -i
(le suffixe à utiliser pour le fichier de sauvegarde) et l'argument du nom de fichier est traité comme les commandes d'édition.
Vous devez spécifier pour désactiver la création du fichier de sauvegarde:
sed -i '' ...
Dans votre exemple:
sed -i '' 's/\/fonts/../fonts/' /Users/sergeybasharov/WebstormProjects/snap/compiled/Content/stylesheets/style.css
Les ordinateurs sont stupides, ils ne comprennent pas les choses par contexte, ils ne peuvent donc pas dire que quelque chose commençant par s/
est évidemment une commande d'édition, pas un suffixe.
sed -i 's/\/fonts/../fonts/'
n'est pas une commande sed valide, essayez sed -i 's#/fonts#../fonts#'
J'avais un problème similaire. Vous pouvez installer la version GNU de sed dans votre Mac, appelée gsed, et l'utiliser en utilisant la syntaxe Linux standard.
Pour cela, installez gsed en utilisant les ports (si vous ne l'avez pas, obtenez-le sur http://www.macports.org/ ) en exécutant Sudo port install gsed. Ensuite, vous pouvez exécuter gsed -i 's/old_pattern/new_pattern/g' *