Nach dieser Frage zum Entfernen von Zeilenumbrüchen aus dem Text möchte ich dies wie folgt in einen zsh-Alias umwandeln:
alias striplines=' awk " /^$/ {print \"\n\"; } /./ {printf( \" %s \",$0);}"'
Ich habe versucht, die Anführungszeichen im awk-Skript zu umgehen, erhalte jedoch den folgenden Fehler:
awk: (FILENAME=bspsrobustness FNR=1) fatal: division by zero attempted
(Die Datei heißt bspsrobustness
)
Gibt es eine Möglichkeit zu tun, was ich will? Ich nehme an, ich könnte dies eher in ein awk-Skript als in einen zsh-Alias verwandeln. Ist das meine beste Option?
Antworten:
Sie können eine zsh-Funktion anstelle eines Alias verwenden. Keine zitierenden Reifen zum Durchspringen.
quelle
striplines filename
?"$@"
macht?"$@"
Syntax sendet die Striplines-Argumente ungestört an awk - erforderlich, wenn beispielsweise einer Ihrer Dateinamen Leerzeichen enthält:striplines "file 1" "file 2"
würde zwei Dateinamen an awk senden.Um eine Vorstellung davon zu bekommen, was los ist, laufen Sie
Da die
$
Zeichen in doppelten Anführungszeichen stehen (wenn sie nach dem Erweitern des Alias erweitert werden), werden sie von der Shell interpretiert. Um das Angebot in Anführungszeichen zu setzen, ist es einfacher, die gesamte Aliasdefinition in einfache Anführungszeichen zu setzen. In den einfachen Anführungszeichen wird erweitert, wenn der Alias verwendet wird. Jetzt, da das Argument vonawk
in doppelte Anführungszeichen gesetzt ist, ist klar, dass Sie vorher Backslashes benötigen\"$
.Eine nützliche Redewendung, um eine Zeichenfolge in
'\''
einfachen Anführungszeichen zu setzen, ist, dass es so ziemlich eine Möglichkeit ist, ein wörtliches einfaches Anführungszeichen in eine Zeichenfolge in einfachen Anführungszeichen zu setzen. Technisch gesehen gibt es eine Gegenüberstellung einer Zeichenfolge in einfachen Anführungszeichen, einer Zeichenfolge mit umgekehrten Schrägstrichen'
und einer anderen Zeichenfolge in einfachen Anführungszeichen. Die nebeneinander angeordnete leere Zeichenfolge''
am Ende kann entfernt werden.Nach dieser langen Erklärung eine Empfehlung: Wenn es für einen Alias zu kompliziert ist, verwenden Sie eine Funktion .
quelle