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: awk? quelque chose d'autre? p> p>
8 Réponses :
Voici une solution utilisant Perl:
Perl -Pe 'Quitter si m / ^ $ /' (nom de fichier)
Joe, votre solution Perl est belle. J'aimerais y avoir pensé.
@Joe: m code> est redondant, voir ma réponse Stackoverflow.com/questions/1603389/...
avec SED:
awk '{if ($0 == "") exit; else print}' <file>
Notez que BSD SED CODE> (qui est installé sur OSX par défaut) ne semble pas prendre en charge le
q code> ou
q code> modificateurs.
sed -e '/^$/,$d' <<EOF this is text so is this but not this or this EOF
Probablement un peu plus clair pour écrire ceci comme suit: sed -e '/ ^ $ /, $ d'
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'
Solution AWK
awk '/^$/{exit} {print} ' <filename>
1 code> est plus court que l'écriture
{imprimé} code> et fait la même chose.
plus plus Comment sur environ dans Shell? p> (ou awk code>:
sed code>: p>
printf '% s \ n' code> au lieu de
echo code>, si votre coquille est buggy et gère toujours des escapades.) p> p>
Nice maladroit! Le second SED peut être raccourci vers '/./! Q' code> -
q code> quitte immédiatement, sans impression automatique. +1
J'ai essayé des timings: '/./! Q' code> 2.5S;
'/./! {d; q}' code> 5.5s;
'/ ^ $ / q' code> 7.5s.
Notez que BSD SED CODE> (qui est installé sur OSX par défaut) ne semble pas prendre en charge le
q code> ou
q code> modificateurs.
# awk '!NF{exit}1' file output these lines
Une autre solution Perl: