2010-12-28 14 views

Antwort

7

Es entfernt Leerzeilen. Die Bedingung ist $0 (die gesamte Zeile) stimmt nicht mit !~ der Regexp /^$/ überein (der Anfang der Zeile unmittelbar gefolgt von dem Ende der Zeile).

Ähnlich grep -v '^$'

5

Er druckt nicht leere Eingabezeilen. Hinweis: "Leer" bedeutet in diesem Fall nicht "leer".

-2

Machen Sie es lesbar erste ...

 
echo '$0!~/^$/{print $0}' | a2p 
==> 
$, = ' '; 
$\ = "\n"; 

while (<>) { 
    chomp; 
    if ($_ !~ /^$/) { 
     print $_; 
    } 
} 

Und das interpretieren. Drucken Sie in diesem Fall keine leeren Zeilen.

sagte
awk '!/^$/' 

oder

sed '/^$/d' 
+1

-1. Ich mag Perl, aber "lesbar" ist im Auge des Betrachters. Ist '$ _' besser als' $ 0'? Ich denke, diese Antwort ist nicht sehr hilfreich. –

2

Ihr Beispiel könnte so einfach neu geschrieben werden. Nicht die mit einem oder mehreren Leerzeichen, sondern die langen Zeichen mit null Zeichen. Wir werden nie wissen, ob dies das beabsichtigte Verhalten war.

Ich möchte bemerken, dass der Code mindestens redundant ist, wenn nicht sogar dreifach redundant, je nachdem, wofür es verwendet wird.

Was sie tut, ist, dass sie die Eingangsleitung mit dem Ausgang druckt wenn die Eingangsleitung ist nicht die leere Zeile.

Da das Standardverhalten von awk ist, dass die Eingabezeile gedruckt wird, wenn eine Bedingung ohne folgenden Programmblock erfüllt ist, würde dies genügen:

awk '$0!~/^$/' or even shorter awk '$0!=""' 

Wenn Sie sicher sein können, dass keine Linie würde auf null zerlegt werden, selbst ein

könnte den Trick tun.

+0

oder: awk '$ 0! = "' ' – galaxywatcher

0

wie Ben Jackson und die anderen, entfernt sie vollständig leere Zeilen: