Suppression d'un slash entre single quote [Résolu]

Messages postés
210
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
13 septembre 2019
-
Bonjour,
Je dispose d'un fichier "test.txt" qui est composé de la ligne suivante:
NAME='/',

Mon objectif est de supprimer le slash qui se trouve entre les singles quotes, soit:
NAME=' ',

Pour l'instant, j'ai testé la commande suivante, mais ça ne marche pas:
sed -i 's/NAME=\'/',/NAME='',/g' test.txt

Pourriez-vous svp m'apporter votre aide ?
Merci
Afficher la suite 

2 réponses

Messages postés
26309
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 septembre 2019
1785
0
Merci
Bonjour
Faut sûrement mettre in back slash devant ton slash dans la regex
Ka-El
Messages postés
210
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
13 septembre 2019
-
Bonjour Jordane,
j'ai essayé:
sed -i 's/NAME=\'\/',/NAME='',/g' test.txt

Mais ça ne fonctionne pas non plus...
Commenter la réponse de jordane45
Messages postés
36964
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
17 septembre 2019
3980
0
Merci
Salut,

Il faut remplacer le délimiteur par défaut (le slash "/") par un caractère qu'on ne risque pas de rencontrer dans la cible recherchée, comme le croisillon (#) :

$ cat fich 
blabla='xxx/xxx/xxx'
NAME='/',
VAR='/mon/chemin/à/moi'



$ sed '/NAME/{s#/##}' fich 
blabla='xxx/xxx/xxx'
NAME='',
VAR='/mon/chemin/à/moi'


Sinon, on ne met l'option "-i" qu'une fois qu'on est sûr de sa syntaxe ! ;-(


zipe31
Messages postés
36964
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
17 septembre 2019
3980 > Ka-El
Messages postés
210
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
13 septembre 2019
-
Autant pour une simple substitution de motif (
s#blabla#blibli#
) il n'est pas nécessaire de protéger le nouveau caractère délimiteur.

Autant pour un motif de recherche (
sed '\#motif#{s|bla|bli|}'
) il faut absolument protéger le 1er caractère faisant office de nouveau délimiteur. Ceci ne s'applique qu'au motif de recherche, pas à celui de substitution.
Ka-El
Messages postés
210
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
13 septembre 2019
-
ça marche.
j'ai quand même relu plusieurs fois ton explication avant de bien comprendre :-)
En tout cas, merci encore !
Bonne journée et certainement à la prochaine :-)
Ka-El
Messages postés
210
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
13 septembre 2019
-
De retour... :-)
En effet, je viens de remarquer un truc gênant :-)
Dans ce cas précis:
$ cat fich 
blabla='xxx/xxx/xxx'
NAME='N',
VAR='/mon/chemin/à/moi'


Avec la commande suivante:
sed -i "\#NAME='N'#{s#N#T#}" fich

J'obtiens ce résultat:
blabla='xxx/xxx/xxx'
TAME='T',
VAR='/mon/chemin/à/moi'


Le "NAME" en début de ligne subit aussi la transformation et se transforme en "TAME"

Y a t-il un moyen pour éviter cela ?
zipe31
Messages postés
36964
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
17 septembre 2019
3980 > Ka-El
Messages postés
210
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
13 septembre 2019
-
Je ne vais pas t'expliquer chaque cas particulier un par un. Il te faut lire le
man sed
et te renseigner sur les regex.

$ cat fich 
blabla='xxx/xxx/xxx'
NAME='N',
VAR='/mon/chemin/à/moi'

$ sed "/NAME='N'/{s/N\b/T/}" fich
blabla='xxx/xxx/xxx'
NAME='T',
VAR='/mon/chemin/à/moi'
Ka-El
Messages postés
210
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
13 septembre 2019
-
Merci.
J'ai bien compris le message, je ne t'embête plus.
Commenter la réponse de zipe31