#1 Le 31/10/2015, à 20:21
- sergeG75018
proteger caracteres spéciaux dans une boucke while avec sed.
Bonjour c'est encore moi.
Aujourd'hui mon souci est que je n'arrive pas a faire prendre en charge les caractères spéciaux par sed.
exemple: dans ce cas je suis obligé de "double quoter" mes variable pour qu'elles agissent comme je veux et ça marche, mais il n'y a pas de caractères spéciaux.
man sed > "$HOME/sed.txt"
grep -i ^[a-z] "$HOME/sed.txt" | while read line ; do
echo "$line"
sed -i 's/'"^$line"'/quelquechose'"$line"'autrechose/g' "$HOME/sed.txt"
done
maintenant on cherche des caractères spéciaux et là ça marche plus ils ne sont pas protégés.
man sed > "$HOME/sed.txt"
grep -i "//" "$HOME/sed.txt" | while read line ; do
echo "$line"
sed -i 's/'"$line"'/quelquechose'"$line"'autrechose/g' "$HOME/sed.txt"
done
Ça fait un bon moment que je suis là-dessus et un peu d'aide ne sera pas de refus .
Merci.
Dernière modification par sergeG75018 (Le 31/10/2015, à 20:23)
Ironie, sarcasme ou cynisme? Je ne sais plus
Hors ligne
#2 Le 31/10/2015, à 21:27
- pingouinux
Re : proteger caracteres spéciaux dans une boucke while avec sed.
Bonsoir,
Tu te compliques bien la vie…
Ce que tu fais, c'est de lire une première fois le fichier pour récupérer les lignes qui t'intéressent, et tu le relis pour chaque ligne trouvée. Ce n'est pas efficace.
Essaye ceci :
man sed > "$HOME/sed.txt"
sed -ri '/^[a-zA-Z]/s/(.*)/quelquechose\1autrechose/' "$HOME/sed.txt"
man sed > "$HOME/sed.txt"
sed -ri '\#//#s/(.*)/quelquechose\1autrechose/' "$HOME/sed.txt
Édité :
On peut même traiter les deux expressions en même temps
sed -ri '\#^[a-zA-Z]|//#s/(.*)/quelquechose\1autrechose/' "/$HOME/sed.txt"
Remarque :
Pour remplacer une chaîne avec sed, tu peux utiliser n'importe quel séparateur. Par exemple, pour remplacer // par mes_2_slash
sed 's#//#mes_2_slash#g' fichier
Dernière modification par pingouinux (Le 01/11/2015, à 05:10)
Hors ligne
#3 Le 04/11/2015, à 08:49
- sergeG75018
Re : proteger caracteres spéciaux dans une boucke while avec sed.
Bonjour.
Désolé pour le retard problème d'internet.
Il y-a beaucoup de choses que je ne comprend pas et ce que je vais écrire va peut-être paraître idiot à certain.
dans cette ligne:
sed -ri '/^[a-zA-Z]/s/(.*)/quelquechose\1autrechose/' "$HOME/sed.txt"
(.*) dépend bien du shell et doit renvoyer soit la valeur 0 soit 1
si oui pourquoi les 2 ont elles le même résultat?
mea culpa:Je ne connaissais pas info qui est beaucoup plus complet que man.
Merci.
Ironie, sarcasme ou cynisme? Je ne sais plus
Hors ligne
#4 Le 04/11/2015, à 09:06
- pingouinux
Re : proteger caracteres spéciaux dans une boucke while avec sed.
(.*) dépend bien du shell et doit renvoyer soit la valeur 0 soit 1
.* : C'est la ligne complète. Les parenthèses permettent de l'insérer dans le champ de remplacement avec \1 (1er groupe de parenthèses)
si oui pourquoi les 2 ont elles le même résultat?
De quelles 2 parles-tu ?
Hors ligne
#5 Le 04/11/2015, à 09:24
- sergeG75018
Re : proteger caracteres spéciaux dans une boucke while avec sed.
Et bien que je mettes \0 ou \1 j'ai le même résultat.
Ironie, sarcasme ou cynisme? Je ne sais plus
Hors ligne
#6 Le 04/11/2015, à 09:48
- pingouinux
Re : proteger caracteres spéciaux dans une boucke while avec sed.
Oui, ici c'est la même chose (\0 représente la portion de la ligne correspondant à l'expression régulière). Voici un exemple où c'est différent :
$ sed -r 's/((AA).*(BB)).*/ 0=\0= 1=\1= 2=\2= 3=\3=/' <<<"débutAAAmilieuBBBfin"
début 0=AAAmilieuBBBfin= 1=AAAmilieuBBB= 2=AA= 3=BB=
\1, \2, \3 correspondent aux numéros des parenthèses ouvrantes.
Hors ligne
#7 Le 04/11/2015, à 12:46
- sergeG75018
Re : proteger caracteres spéciaux dans une boucke while avec sed.
OK et comme au début il n'y a rien il apparaît en dehors du résultat
merci à toi
Ironie, sarcasme ou cynisme? Je ne sais plus
Hors ligne