J'ai un fichier texte nommé compare.txt que je veux extraire la seule ligne qui suit chaque ligne qui contient le motif "nmse_gain_constant". La commande suivante me rapproche:
grep -A 1 nmse_gain_constant compare.txt | grep -v nmse_gain_constant
Mais cela inclut un séparateur "-" entre chaque ligne de texte souhaité. Des idées simples pour se débarrasser des lignes "-"?
Je vous donnerais un exemple de texte ici, mais les caractères "-" sont interprétés à tort par ce message Web comme des caractères de contrôle et ce que vous verriez n'est pas correct.
Je fais ça:
grep ... | grep -v -- "^--$"
Mais ça marche aussi!
grep --no-group-separator ...
Et il ne crache pas ce "-" ni même une ligne vierge.
Il existe un paramètre non documenté de grep: "--group-separator", qui remplace le "-" par défaut. Vous pouvez le régler sur "" pour supprimer le double tiret. Cependant, vous obtenez toujours une ligne vide. J'ai eu le même problème et j'ai trouvé ce paramètre en lisant le code source de grep.
Eh bien, le commutateur A
par défaut ajoutera ces caractères, donc ce n'est pas un mystère.
man grep
États:
-A NUM
Places a line containing a group separator (--) between
contiguous groups of matches. With the -o or --only-matching
option, this has no effect and a warning is given.
Mais vous pouvez utiliser un simple sed pour nettoyer le résultat:
yourgrep | sed '/^--$/d'
Il n'est pas nécessaire de diriger vers autant de greps ou d'utiliser d'autres outils (par exemple, sed) si vous utilisez AWK:
awk '/nmse_gain_constant/{getline;print }' compare.txt
Une solution sera:
grep -A 1 nmse_gain_constant compare.txt | grep -v nmse_gain_constant | grep -v "\-\-"