GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Afficher toutes les lignes avant un match ?

Je souhaite afficher toutes les lignes avant une correspondance, pas seulement 10, 7 ou 14 par exemple, comme expliqué dans Comment récupérer les lignes avant/après le résultat de grep dans bash ?.

Comment puis-je le faire? Peu importe si la ligne correspondante est incluse ou non.

Par exemple, au lieu de :

... | grep -B 10 -- "foo"

Je veux :

... | grep -B -- "foo"

Mais ce dernier code ne fonctionne pas.

Réponse acceptée :

  • Y compris le match,

    sed '/foo/q' file
    

    Il vaut mieux q uit sed dès qu'une correspondance est trouvée, sinon sed continuerait à lire le fichier et vous ferait perdre du temps, ce qui serait considérable pour les fichiers volumineux.

  • Hors match,

    sed -n '/foo/q;p' file
    

    Le -n flag signifie que seules les lignes qui atteignent le p commande sera imprimée. Depuis le foo la ligne déclenche le q uit action, elle n'atteint pas p et n'est donc pas imprimé.

    • Si votre sed est GNU, cela peut être simplifié en

      sed '/foo/Q' file
      

Références

  1. /foo/ — Adresses
  2. q , p — Commandes souvent utilisées
  3. Q — Commandes étendues GNU Sed
  4. -n — Options de ligne de commande

Ubuntu
  1. Comment supprimer toutes les lignes d'un fichier dans Vim

  2. sed débutant :modification de toutes les occurrences d'un dossier

  3. sed à insérer lors de la première correspondance uniquement

  4. grep ne correspond qu'aux lignes d'une plage spécifiée

  5. Supprimer les lignes vides à l'aide de sed

Comment afficher une liste de toutes les bases de données dans MySQL

Comment afficher la liste de toutes les bases de données sur MySQL

Supprimer tous les commentaires C avec Sed ?

Afficher tout le fichier jusqu'au match ?

Sed :imprimer uniquement la première occurrence d'une correspondance de modèle ?

La commande Cat n'affiche pas les lignes du texte ?