Comment ajouter des sauts de ligne entre les lignes imprimées sur la ligne de commande?


30

Les journaux de messagerie sont incroyablement difficiles à lire. Comment pourrais-je sortir une ligne vierge entre chaque ligne imprimée sur la ligne de commande? Par exemple, disons que je salue le journal. De cette façon, plusieurs lignes enveloppées ne sont pas confondues.

Réponses:


52
sed G 
# option: g G    Copy/append hold space to pattern space.

Gn'est pas souvent utilisé, mais est agréable à cet effet. sed conserve deux espaces tampons: le «pattern space» et le «hold space». Les lignes traitées par sed circulent généralement à travers l'espace de motif différentes commandes opèrent sur son contenu ( s///, p, etc.); l'espace d'attente commence vide et n'est utilisé que par certaines commandes.

La Gcommande ajoute une nouvelle ligne et le contenu de l'espace d'attente à l'espace de motif. Le programme sed ci-dessus ne met jamais rien dans l'espace d'attente, donc Gajoute efficacement juste une nouvelle ligne à chaque ligne qui est traitée.


3
Le -e n'est pas nécessaire. la tuyauterie whatever | sed Gdevrait faire l'affaire.
frabjous

@frabjous: Oui, autant laisser de côté -ecar nous n'avons besoin que d'un seul argument de commande.
Chris Johnsen

Puis-je vous donner comme, +2? Nails it!
Christian Bongiorno

mais, c'est seulement montrer dans stdout, mais pas l'enregistrer
biolinh

8

Utilisez awk pour ajouter une nouvelle ligne supplémentaire. Cela vous permet également de filtrer les choses dont vous ne voulez pas.

awk '{print $0,"\n"}' | less

4

Utilisez sed et remplacez la ligne entière par elle-même plus un caractère de nouvelle ligne supplémentaire:

grep foo /var/log/maillog | sed -e "s/^.*$/&1\n/"

4
Une substitution sed légèrement plus simple serait 's / $ / \ n /', bien que la commande 'G' de @Chris Johnsen soit encore plus simple.
camh

3

C'est ce que tu cherches?

grep SPAM mail.log | while read -r line; do echo; echo $line; done


Vous voudrez probablement l'utiliser read -rpour éviter de traiter les caractères antislash comme spéciaux.
Chris Johnsen

0

Si c'est pour plus que simplement regarder, je préfère les envoyer dans un fichier texte et les ouvrir avec un éditeur de texte afin que vous puissiez définir les lignes pour envelopper ou non et faire des recherches facilement ... et supprimer les lignes indésirables et ainsi de suite sans avoir à taper beaucoup de commandes.

cat file.log > log.txt et gedit log.txtou un éditeur de terminaux comme nano

Edit: ou ce cp file.log log.txtqui est bien sûr plus facile et plus rapide ... grâce au commentaire de KeithB


1
Pourquoi catet non cp?
KeithB

ce cpserait sûr plus facile et plus rapide! ... lol - Je lisais les autres réponses traitant grepet awkdonc je l'ai écrit de la catfaçon mais je corrige cela, merci
laurent
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.