Expressions régulières avec egrep et sed
Résolu/Fermé
A voir également:
- Expressions régulières avec egrep et sed
- Remplacez le mot sed par le mot mais dans tout le texte. combien de caractères contient le document suite à cette modification (en incluant les espaces) ? - Guide
- Sed et ses caprices (ou les miens) ✓ - Forum Linux / Unix
- Sed windows - Forum Linux / Unix
- Sed supprimer ligne vide - Forum Linux / Unix
- Comptage des caractères dans Word ✓ - Forum Word
3 réponses
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
6 nov. 2009 à 17:43
6 nov. 2009 à 17:43
Salut,
;-))
[tmpfs]$ cat plop <html> <body> <p style="font-weight:bold" Bienvenue Ici !> <?php $chaine="par moi"; echo "sur le site"; echo "fait $chaine" ?> </body> </html> [tmpfs]$ sed '/^<?/,/^?>/{/".*\$.*"/!{s/"/'\''/g}}' plop <html> <body> <p style="font-weight:bold" Bienvenue Ici !> <?php $chaine='par moi'; echo 'sur le site'; echo "fait $chaine" ?> </body> </html> [tmpfs]$
;-))
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
7 nov. 2009 à 00:13
7 nov. 2009 à 00:13
Salut,
Ce n'est qu'une solution pour ce cas concret
Ce n'est qu'une solution pour ce cas concret
lami20j@debian:~$ cat t.txt <html> <body> <p style="font-weight:bold" Bienvenue Ici !> <?php $chaine="par moi"; echo "sur le site"; echo "fait $chaine" ?> </body> </html> lami20j@debian:~$ grep -v '^[<?]' t.txt|egrep -o '"[^\$]*"' "par moi" "sur le site"
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
7 nov. 2009 à 13:44
7 nov. 2009 à 13:44
Tiens essaie un truc comme ça :
;-))
[tmpfs]$ ls foo.sh* plop [tmpfs]$ cat plop <html> <body> <p style="font-weight:bold" Bienvenue Ici !> <?php $chaine="par moi"; echo "sur le site"; echo "fait $chaine" ?> </body> </html> [tmpfs]$ cat foo.sh #! /bin/sh #set -xv if [ "${#}" != "1" ] then echo "Usage : $0 fichier_à_traiter" exit fi fichier="$1" compteur="$(grep -v '^[<?]' ${fichier} |egrep -c '"[^\$]*"')" count=1 OLD_VAR="§" while [ "${count}" -le "${compteur}" ] do VAR=$(grep -v '^[<?]' ${fichier} | grep -v "${OLD_VAR}" | egrep -m${count} '"[^\$]*"') echo "Voulez-vous remplacer la chaîne : " $VAR "? (O/N)" read reponse case "${reponse}" in O|o) VAR_NEW=$(echo "${VAR}" | tr '"' "'") sed -i.bak${count} 's/'"$VAR"'/'"$VAR_NEW"'/' "${fichier}" (( count++ )) ;; N|n) OLD_VAR="${VAR}" (( count++ )) ;; esac done [tmpfs]$ ./foo.sh plop Voulez-vous remplacer la chaîne : $chaine="par moi"; ? (O/N) n Voulez-vous remplacer la chaîne : echo "sur le site"; ? (O/N) o [tmpfs]$ cat plop <html> <body> <p style="font-weight:bold" Bienvenue Ici !> <?php $chaine="par moi"; echo 'sur le site'; echo "fait $chaine" ?> </body> </html> [tmpfs]$ ls foo.sh* plop plop.bak2 [tmpfs]$
;-))
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
>
Regexeur
8 nov. 2009 à 17:01
8 nov. 2009 à 17:01
Remplace le délimiteur par défaut (le slash /) par un caractère dont tu es sûr qu'il ne se trouvera dans aucun motif...
Voir la FAQ SED -Les délimiteurs
Voir la FAQ SED -Les délimiteurs
Regexeur
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
8 nov. 2009 à 20:30
8 nov. 2009 à 20:30
ok c'est bon j'ai mis un "ŧ" : je ne pense pas l'utiliser celui là dans mes scripts php...
Merci de votre aide
Merci de votre aide
6 nov. 2009 à 22:15
et avec grep cela donne quoi ?
6 nov. 2009 à 22:22
pas tester donc pas sur que cela fonctionne.
6 nov. 2009 à 23:14
grep n'est pas fait pour ça !
7 nov. 2009 à 00:04
7 nov. 2009 à 09:26
Ce qui change totalement le sens de ta demande initiale !
La réponse t'a été donnée au message #6 par lami20j, mais je n'en vois pas trop l'utilité.