GNU/Linux >> Tutoriels Linux >  >> Linux

Échapper à Blackslash dans Sed ?

J'essaie d'écrire une commande sed pour remplacer une ligne dans un fichier. Le remplacement de sed nécessitait le répertoire de travail actuel, ce qui commence à rendre la commande un peu compliquée à cause des caractères qui doivent être échappés.

Voici ce que j'ai jusqu'à présent :

sed -i "s/^log.*$/log `echo pwd | sed 's/\//\\\//g'`\/redis\/redis.log\/" ./conf/redis.conf

Cependant, cela me donne une erreur avec sed.

J'ai essayé de le décomposer en commandes plus simples :

[email protected]:~/project$pwd | sed 's/\//\\\//g'
\/home\/user\/project

Cela renvoie ce que je veux, mais lorsque j'essaie d'ajouter une substitution de commande, cela échoue :

[email protected]:~/project$ echo `pwd | sed 's/\//\\\//g'`
sed: -e expression #1, char 9: unknown option to `s'

Toute aide serait appréciée

Réponse acceptée :

Si j'ai bien compris, vous essayez de remplacer les barres obliques (/ ) avec une barre oblique échappée (\/ ) ? Cela fait beaucoup beaucoup plus facile à gérer si vous n'utilisez pas / comme délimiteur dans sed :

~ $ pwd | sed 's_/_\\/_g'`
\/home\/username
~ $ echo "$( pwd | sed 's_/_\\/_g' )"
\/home\/username

Linux
  1. Comment remplacer une chaîne dans un ou plusieurs fichiers ?

  2. Comment utiliser Sed pour remplacer une chaîne multiligne ?

  3. Ajout avec "sed" ?

  4. Supprimer tous les commentaires C avec Sed ?

  5. Barre oblique et barre oblique inverse dans Sed ?

Remplacement de chaîne dans Bash

COMMENT UTILISER L'EDITEUR SED

Top 20 des commandes sed à utiliser

Remplacer Sed multi-lignes

Échapper correctement à la barre oblique dans le script bash pour une utilisation avec sed

Expression régulière avec sed