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.

xénoterracide
la source

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.

Chris Johnsen
la source
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
KeithB
la source
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/"
fschmitt
la source
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

Nifle
la source
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

laurent
la source
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