Siguiendo con esta pregunta sobre la eliminación de nuevas líneas del texto, quiero convertir esto en un alias zsh de la siguiente manera:
alias striplines=' awk " /^$/ {print \"\n\"; } /./ {printf( \" %s \",$0);}"'
Intenté escapar de las comillas dentro del script awk, pero recibo este error:
awk: (FILENAME=bspsrobustness FNR=1) fatal: division by zero attempted
(El archivo se llama bspsrobustness
)
¿Hay alguna manera de hacer lo que quiero? Supongo que podría convertir esto en un script awk en lugar de un alias zsh, ¿es esa mi mejor opción?
Respuestas:
Podría usar una función zsh en lugar de un alias. No hay aros de citas para saltar.
fuente
striplines filename
:?"$@"
está haciendo?"$@"
sintaxis envía los argumentos de striplines a awk sin perturbaciones, lo que es necesario si, por ejemplo, alguno de sus nombres de archivo contiene espacios:striplines "file 1" "file 2"
enviaría dos nombres de archivo a awk.Para tener una idea de lo que está pasando, corre
Dado que los
$
caracteres están entre comillas dobles (cuando se expanden después de que se expande el alias), son interpretados por el shell. Para que la cita sea correcta, es más fácil poner la definición completa del alias entre comillas simples. Lo que está dentro de las comillas simples es lo que se expandirá cuando se use el alias. Ahora que el argumento deawk
está entre comillas dobles, está claro que necesita barras invertidas antes\"$
.Una expresión útil para comillas simples de una cadena entre comillas simples es que
'\''
es más o menos una forma de poner una comilla simple literal en una cadena entre comillas simples. Técnicamente hay una yuxtaposición de una cadena entre comillas simples, una barra invertida entre comillas'
y otra cadena entre comillas simples. La cadena vacía yuxtapuesta''
al final se puede quitar.Después de esta larga explicación, una recomendación: cuando es demasiado complicado para un alias, use una función .
fuente