La intención es insertar justo después de la HEAD
Código de etiqueta de Google en un sitio web HTML heredado.
#!/bin/bash
find . -type f -iname "*.php" -or -iname "*.htm" -or -iname "*.html" | while read i; do
echo "Processing: $i"
sed -i 's*<HEAD>*&\
<!-- Global site tag (gtag.js) - Google Analytics -->\
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-1234567-2"></script>\
<script>\
window.dataLayer = window.dataLayer || [];\
function gtag(){dataLayer.push(arguments);}\
gtag('js', new Date());\
\
gtag('config', 'UA-1234567-2');\
</script>*' "$i"
done
Lo anterior coloca el código de etiqueta de Google donde debería, pero sin las comillas simples:
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-1234567-2"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag(js, new Date());
gtag(config, UA-1234567-2);
Las comillas simples faltan una vez procesadas:
# diff actual_google_tag_code processed
6c6
< gtag('js', new Date());
---
> gtag(js, new Date());
8,9c8
< gtag('config', 'UA-1234567-2');
< </script>
---
> gtag(config, UA-1234567-2);
Si sustituyo el '
con un \'
, Recibo un mensaje de error:
line 13: syntax error near unexpected token `('
line 13: ` gtag(\'js\', new Date());\'
Ya que estoy usando \
para continuar con cada línea, no estaba seguro de que la barra diagonal inversa para escapar de la comilla simple funcionara, pero pensé que lo intentaría.
¿Cómo puedo conservar esas comillas simples en el código de la etiqueta de Google?
bash
escape-characters
Edward_178118
fuente
fuente
sed
línea.sed 's/f/\x27/' <<<foo
o escape decimalsed 's/f/\d039/' <<<foo
Respuestas:
Desde
man 1 bash
:Solución: coloque comillas simples dentro de comillas dobles:
Repita este truco donde lo necesite, será como:
(recuerde que esta línea continúa con la anterior, donde ya se abre una sola cita; al final, la deja abierta para cerrarse en la siguiente línea).
En general es posible colocar solo
'
en comillas dobles, dejando todo lo demás en comillas simples, por ejemplo:El resultado es
$A'$B'$C
.fuente
'foo'bar'
se vuelve válido'foo'"'"'bar'
.