Grep: rechercher et remplacer la ligne complète


13

La commande

 grep "foo" myfile.txt

imprime toutes les lignes correspondantes dans mon fichier.

Maintenant, je veux remplacer la ligne complète par une autre chaîne. Comment puis je faire ça?

Réponses:


13

Si vous faites correspondre une sous-chaîne de la ligne entière, vous pouvez soit utiliser la scommande sed avec une expression régulière pour éponger le reste de la ligne:

sed -i 's/^.*foo.*$/another string/' myfile.txt

ou utilisez la ccommande pour remplacer la ligne correspondante en une seule fois:

sed -i '/foo/ { c \
another string
}' myfile.txt

Si vous ne voulez pas taper de commandes multilignes à l'invite, vous pouvez le mettre à la place dans un script:

$ cat foo.sed
/foo/ { c \
another string
}

$ sed -i -f foo.sed myfile.txt

Merci! lorsque j'utilise la deuxième option, j'obtiens: sed: -e expression # 1, char 0: inégalé `{'
clamp

à la fin de la première ligne, vous devez taper \ puis appuyer sur Retour - il est important que le \ échappe à cette première nouvelle ligne. Ensuite, assurez-vous que le }'est sur une ligne séparée de another string: le remplacement est tout sur cette deuxième ligne, y compris }si vous le mettez là.
Inutile

-1

Vous pouvez utiliser la fonctionnalité inplace de sed :

sed -i -e 's/foo/bar/' myfile.txt

Cela ne remplacera que tous foopar barpas la ligne entière ..
Jahid
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.