Quel outil de ligne de commande GNU / Linux utiliserais-je pour effectuer une recherche et remplacer sur un fichier?

StackOverflow https://stackoverflow.com/questions/155934

  •  03-07-2019
  •  | 
  •  

Question

Quel outil de ligne de commande GNU / Linux utiliserais-je pour effectuer une recherche et le remplacer sur un fichier?

Le texte de recherche et son remplacement peuvent-ils être spécifiés dans un format regex?

Était-ce utile?

La solution

sed 's/a.*b/xyz/g;' old_file > new_file

GNU sed (que vous avez probablement) est encore plus polyvalent:

sed -r --in-place 's/a(.*)b/x\1y/g;' your_file

Voici une brève explication de ces options:

  

-i [SUFFIX], --in-place [= SUFFIX]                   éditer les fichiers en place (sauvegarde si extension fournie)

     

-r, --regexp-extended                   utilisez des expressions régulières étendues dans le script.

La version FreeBSD prend également en charge ces options. NetBSD et Les versions OpenBSD ne prennent en charge que -r .

Si vous souhaitez en savoir plus sur sed, Cori a suggéré ce didacticiel .

Autres conseils

Perl a été inventé pour cela:

perl -pi -e 's/foo/bar/g;' *.txt

Tout modèle s /// normal dans ces guillemets simples. Vous pouvez conserver une sauvegarde avec quelque chose comme ceci:

perl -pi.bak -e 's/foo/bar/g;' *.txt

Ou pipeline:

cat file.txt | perl -ne 's/foo/bar/g;' | less

Mais c'est vraiment le travail de Sed.

Considérez Ruby comme une alternative à Perl. Il a volé la plupart des arguments de ligne de commande one-liner de Perl ( -i , -p , -l , -e , -n ) et définit automatiquement $ _ comme Perl le fait et a beaucoup de bonté regex. De plus, la syntaxe de Ruby peut être plus confortable et plus facile à lire ou à écrire que celle de Perl ou de sed. (Ou non, selon vos goûts.)

ruby ??-pi.bak -e '$ _. gsub! (/ foo | bar /) {| x | x.upcase} '* .txt

vs.

perl -pi.bak -e '/ (foo | bar) / \ U \ 1 / g' * .txt

Dans de nombreux cas, lorsqu'il s'agit de lignes uniques, les performances ne suffisent pas pour déterminer si vous utilisez du poids léger, du poids lourd Perl ou du poids plus lourd Ruby. Utilisez ce qui est le plus facile à écrire.

sed , l'éditeur de flux, et oui, il utilise l'expression régulière.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top