Solución:
Nunca incluyas ningún guión entre comillas dobles o te estás sentenciando a ti mismo al infierno de barra invertida. Esta es la sintaxis de lo que está intentando hacer:
glb_library="my_library"
awk -v glb_library="$glb_library" '
/^Direct Dependers of/ { next }
/^---/ { next }
$0 ~ "^"glb_library":" { ver=$0; next }
{ gsub(/[[:space:]]/, ""); print ver":"$0 }
' file
En base a los comentarios anteriores de los expertos de awk y algunas investigaciones, estoy publicando esta respuesta:
- las cadenas awk se encierran entre comillas dobles, no entre comillas simples; más precisamente: las comillas simples no son delimitadores de cadenas en awk, a diferencia de shell
- awk no otorga un significado especial a las comillas simples y deben encerrarse entre comillas dobles si se usan en cadenas literales
- es mejor usar comillas simples para envolver declaraciones awk en la línea de comando, a diferencia del código de OP que usa comillas dobles (Ed señaló esto claramente)
Más aclaraciones:
-
""
es la cadena nula en awk, no''
- para usar comillas simples en un literal de cadena awk, enciérrelas entre comillas dobles, como en
"Ed's answers are great!"
-
Otras técnicas que se siguen al manejar comillas simples en awk son:
a) usa una variable, como en
awk -v q="'" '{ print q }' ...
b) usar notación octal o hexadecimal, como en
awk '{ print " 47"$0" 47" }' ...
Documentación relevante aquí.
Un resumen pragmático:
-
Como recomienda sensatamente la útil respuesta de Ed Morton:
Siempre usa soltero citas para adjuntar suawk
guión como un todo ('...'
), lo que garantiza que no haya confusión sobre lo que cascarón interpreta en la delantera, y quéawk
termina viendo. -
Para definir cadenas dentro un
awk
texto, siempre usar doble citas ("..."
).-
"
es el único delimitador de cadenaawk
reconoce. -
"..."
las cadenas son no interpolando (no puede incrustar referencias de variables), pero reconocen secuencias de caracteres de control tal comon
yt
.
-
-
Una sola cita (
'
) no tiene sintáctico significado dentro de unawk
texto, pero, – si estás usando'...'
para su guión general, como se recomienda – no puedes usar un literal'
dentro de él de todos modos, porque el concha las cadenas entre comillas simples no permiten incorporado'
caracteres.-
Si tu hacer Necesito usar un literal una frase (
'
) en tusawk
texto, tienes tres opciones:- Pasar un variable que lo define, y usa
awk
concatenación de cadenas de caracteres, basada en literales de cadena directamente contiguos y referencias de variables:
awk -v q=' 'BEGIN { print "I" q "m good." }' # -> I'm good
- Utilice un secuencia de escape dentro
"..."
; para máxima portabilidad y eliminación de ambigüedades, utilice un octal secuencia de escape (
- Pasar un variable que lo define, y usa
-
Si tu hacer Necesito usar un literal una frase (