2010-06-08 13 views
1

Je veux trouver une chaîne comme "qwertty =" dans un fichier avec "awk" ou "grep" mais je ne veux pas voir les lignes aveC#. S'il vous plaît voir l'exemplerechercher une chaîne dans un fichier en ignorant les lignes commençant par #

grep -ni "qwertty" /aaa/bbb 
798:# * qwertty - enable/disable 
1222:#qwertty=1 
1223:qwertty=2 
1224:#qwertty=3 

Je veux trouver la ligne 1223. Quelle devrait être la requête de recherche à cette fin?

Répondre

2
grep -ni '^qwertty=' /aaa/bbb 

Si vous voulez plus de flexibilité (pas de hachage sur la première ligne, par exemple, et peut-être des blancs avant le mot-clé, et peut-être le mot-clé incorporé dans un plus grand mot, et peut-être des blancs autour du signe « = ») , alors vous avez besoin d'une expression plus complexe:

grep -ni '^[^#]*qwertty[^#]*=[^#]*$' /aaa/bbb 
+0

merci. Comment puis-je utiliser awk dans ce but? – ephieste

+0

@ephieste: 'awk '/^[^ #] * qwertty [^ #] * = [^ #] * $ /'/aaa/bbb'? –

+0

Lorsque je crée un nouveau fichier et que j'écris les lignes ci-dessus, la commande fonctionne. C'est étrange mais cela ne fonctionne pas pour certains fichiers et chaînes sur mon serveur. Je pense qu'il me manque un point. Comme il n'a pas pu trouver la ligne suivante: pm3gppXmlEnabled = true – ephieste

0

awk '/^#/ {next} /qwertty/' afile

+0

/qwerty/&&!/^ # / – ghostdog74

0
grep -ni "qwertty" /aaa/bbb|grep -v '^#' 
1

Si je comprends bien la question, je résoudre le dilemne ainsi:

grep -v '^#' | grep -ni "qwertty" 

ou mieux encore:

sed '/^#/d' | grep -ni "qwertty"