52 votes

Comment remplacer globalement les chaînes de caractères dans les lignes ne commençant PAS par un certain motif ?

Je veux remplacer globalement la chaîne foo par la chaîne bar, en utilisant sed. Cela ne doit être fait que pour les lignes qui ne commencent PAS par la chaîne ##Input.

Je n'arrive pas à le faire fonctionner. J'ai essayé des choses comme ça mais j'en suis arrivé à un point où je ne suis pas sûr de savoir ce que je fais :

sed -i '/^##Input/ s/foo/bar/g' myfile

Aidez-moi !

85voto

Dennis Williamson Points 105818

Il vous suffit d'annuler la correspondance en utilisant ! :

sed -i '/^##Input/! s/foo/bar/g' myfile

-4voto

vpit3833 Points 4435

Tu dois échapper à # comme dans \# .

-7voto

Keith Tyler Points 496

Une réponse laide pour une demande laide (c'est-à-dire qu'ils obtiennent ce qu'ils ont demandé) :

echo \{
for file in *.json; do
    sed -n '/^[\{\}]/! s/\([^\,]\)$/\1,/; /^[\{\}]/!p' $file
done
echo \{

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X