12
votes

Ignorer les commentaires (#) à l'aide de SED, mais gardez les lignes intactes

J'ai un fichier de configuration que je souhaite modifier essentiellement les lignes non motivées, mais pas les lignes commentées. J'utilise sed .

Par exemple, j'ai un fichier appelé fichier.txt: xxx

je veux remplacer "Test" avec "test" mais ne touchez pas les lignes commentées. La sortie finale doit indiquer: xxx


0 commentaires

5 Réponses :


26
votes
$ sed '/^[[:space:]]*#/!s/test/TEST/g' infile
TEST
# test
 # test
TEST

1 commentaires

Bien rangé. J'aurais attendu mal d'être plus lisible, mais c'est bien.



2
votes

Je ne suis pas un expert SED , mais le regexP pour correspondre à ces lignes va regarder quelque chose comme ceci:

^ [^ #]. * Test

  • ^ - début de la ligne
  • [^ #] - premier caractère, tout sauf #
  • . * - quelques caractères supplémentaires, indéfini
  • test - la chaîne que vous recherchez

0 commentaires

0
votes

awk: xxx


0 commentaires

0
votes

Si vous avez Ruby (1.9 +)

ruby -ne 'print $_ !~ /^\s*#/ ?gsub("test","TEST"):$_' file


0 commentaires

1
votes

Pour ignorer les commentaires qui commencent par un # code> lors de la substitution, vous pouvez utiliser la commande suivante: xxx pré>

dans votre cas, il devient: P >

TEST
# test
TEST # test
TEST


0 commentaires