11
votes

Shell: moyen simple d'obtenir toutes les lignes avant la première ligne vide

Quelle est la meilleure commande shell pour sortir les lignes d'un fichier jusqu'à ce que vous rencontriez la première ligne vide? Par exemple: xxx

awk? quelque chose d'autre?


0 commentaires

8 Réponses :


1
votes

Voici une solution utilisant Perl: xxx


3 commentaires

Perl -Pe 'Quitter si m / ^ $ /' (nom de fichier)


Joe, votre solution Perl est belle. J'aimerais y avoir pensé.


@Joe: m est redondant, voir ma réponse Stackoverflow.com/questions/1603389/...



3
votes

avec SED:

awk '{if ($0 == "") exit; else print}' <file>


1 commentaires

Notez que BSD SED (qui est installé sur OSX par défaut) ne semble pas prendre en charge le q ou q modificateurs.



12
votes
sed -e '/^$/,$d' <<EOF
this is text
so is this

but not this
or this
EOF

5 commentaires

Probablement un peu plus clair pour écrire ceci comme suit: sed -e '/ ^ $ /, $ d' . De plus, si vous avez d'énormes fichiers (ou beaucoup d'entre eux), cela pourrait être un problème que cela lit l'ensemble du fichier. Sinon, gentil et court!


J'ai ajouté une solution SED à ma réponse qui ne lit pas le fichier entier.


J'aime aussi la solution SED -E '/./! "de Ephémient.


En plus de donner au code, certaines explications de la manière dont ces travaux auraient aidé les débutants.


C'est bien. Je l'ai adapté aux éléments suivants pour gérer une ligne vierge avec WhitSpace: Sed -e '/ ^ \ s * $ /, $ D'



2
votes

Solution AWK

awk '/^$/{exit} {print} ' <filename>


1 commentaires

1 est plus court que l'écriture {imprimé} et fait la même chose.



1
votes

Un couple de perl one-liners xxx


0 commentaires

7
votes

plus awk : xxx

plus sed : xxx

Comment sur environ dans Shell? xxx

(ou printf '% s \ n' au lieu de echo , si votre coquille est buggy et gère toujours des escapades.)


3 commentaires

Nice maladroit! Le second SED peut être raccourci vers '/./! Q' - q quitte immédiatement, sans impression automatique. +1


J'ai essayé des timings: '/./! Q' 2.5S; '/./! {d; q}' 5.5s; '/ ^ $ / q' 7.5s.


Notez que BSD SED (qui est installé sur OSX par défaut) ne semble pas prendre en charge le q ou q modificateurs.



5
votes
# awk '!NF{exit}1' file
output these
lines

0 commentaires

1
votes

Une autre solution Perl: xxx


0 commentaires