Supprime toutes les lignes sauf celles correspondant aux meilleures pratiques de la ligne de motif (sed)

Je veux supprimer toutes les lignes sauf la ou les lignes contenant le motif correspondant.

Voici comment je l’ai fait:

sed -n 's/matchingpattern/matchingpattern/p' file.txt 

Mais je suis juste curieux parce que je renomme le motif correspondant au motif correspondant lui-même. On dirait un gaspillage ici.

Y a-t-il une meilleure manière de faire cela?

 sed '/pattern/!d' file.txt 

Mais vous réinventez grep ici.

Cela pourrait fonctionner pour vous:

 sed -n '/matchingpattern/p' file.txt 

/.../ est une adresse pouvant comporter des actions jointes dans ce cas p .

Au lieu d’utiliser sed, ce qui est compliqué, utilisez grep.

 grep matching_pattern file 

Cela devrait vous donner le résultat souhaité.

grep est certainement meilleur … car il est beaucoup plus rapide.

par exemple en utilisant grep pour extraire toutes les données de séquence du génome pour le chromosome 6 dans un dataset avec lequel je travaille:

 $ time grep chr6 seq_file.in > temp.out real 0m11.902s user 0m9.564s sys 0m1.912s 

par rapport à sed:

 $ time sed '/chr6/!d' seq_file.in > temp.out real 0m21.217s user 0m18.920s sys 0m1.860s 

Je l’ai répété 3 fois et ~ les mêmes valeurs à chaque fois.