Oui, il existe différentes façons de procéder. Vous pouvez également utiliser awk
, perl
ou bash
pour effectuer ces activités. En général, sed
c'est probablement l'outil le plus approprié pour effectuer ce type de tâches.
Exemples
Disons que j'ai cet exemple de données, dans un fichier data.txt
:
foo bar 12,300.50
foo bar 2,300.50
abc xyz 1,22,300.50
awk
$ awk '{gsub("foo", "foofoofoo", $0); print}' data.txt
foofoofoo bar 12,300.50
foofoofoo bar 2,300.50
abc xyz 1,22,300.50
Perl
$ perl -pe "s/foo/foofoofoo/g" data.txt
foofoofoo bar 12,300.50
foofoofoo bar 2,300.50
abc xyz 1,22,300.50
Édition en ligne
Les exemples ci-dessus peuvent également modifier directement les fichiers. L'exemple Perl est trivial. Ajoutez simplement le -i
commutateur.
$ perl -pie "s/foo/foofoofoo/g" data.txt
Car awk
c'est un peu moins direct mais tout aussi efficace:
$ { rm data.txt && awk '{gsub("foo", "foofoofoo", $0); print}' > data.txt; } < data.txt
Cette méthode crée un sous-shell avec les accolades '{...} `où le fichier y est redirigé via ceci:
$ { ... } < data.txt
Une fois que le fichier a été redirigé dans le sous-shell, il est supprimé puis awk
exécuté contre le contenu du fichier qui a été lu dans les sous-shells STDIN. Ce contenu est ensuite traité awk
et réécrit sous le même nom de fichier que nous venons de supprimer, le remplaçant efficacement.
$var=~s/a/b/g
,gsub(/a/,"b",var)
,var.gsub(/a/,'b')
,var.replace(/a/g,'b')
,preg_replace("/a/","b",$var)
,regsub -all a b $var
. À côté de cela, de nombreux outils et langues peuvent également remplacer les chaînes de texte brut. Votre question est donc en quelque sorte large.