Comment puis-je remplacer foo. avec foo_ avec sed simplement en cours d'exécution
sed 's/foo./foo_/g' file.php
ne fonctionne pas . Merci!
Échapper au .
:
sed 's/foo\./foo_/g' file.php
Exemple:
~$ cat test.txt
foo.bar
~$ sed 's/foo\./foo_/g' test.txt
foo_bar
Fait intéressant, si vous souhaitez rechercher et remplacer uniquement le point, vous devez le placer dans un jeu de caractères. Échapper au point seul dans une commande sed pour une raison quelconque ne fonctionne pas. Le point est toujours étendu à un caractère générique à caractère unique.
$ bash --version # Ubuntu Lucid (10.04)
GNU bash, version 4.1.5 (1) - release (x86_64-pc-linux-gnu)
$ echo aa.bb.cc | sed s/\./-/g # replaces all characters with dash
'--------'
$ echo aa.bb.cc | sed s/[.]/-/g # replaces the dots with a dash
aa-bb-cc
Avec l'ajout de personnages principaux dans la recherche, l'évasion fonctionne.
$ echo foo. | sed s/foo\./foo_/g # works
foo_
Mettre le point dans un jeu de caractères fonctionne bien sûr également.
$ echo foo. | sed s/foo[.]/foo_/g # also works
foo_
--Paul
Échapper au point avec un \
sed 's/foo\./foo_/g' file.php
Si vous trouvez la combinaison de/et\déroutante, vous pouvez utiliser un autre caractère 'séparateur'
sed 's#foo\.#foo_#g
Le deuxième caractère après le s peut être n'importe quoi et sed utilisera ce caractère comme séparateur.
Vous devez échapper au point - un point non échappé correspondra à tout caractère après foo.
sed 's/foo\./foo_/g'
Pour moi, sed 's/foo\./foo_/g'
fonctionne. Mais vous pouvez aussi essayer:
sed -e 's/foo\./foo_/g'
et
sed -e "s/foo\\./foo_/g"
et
sed 's/foo[.]/foo_/g'