sed中单引号的反斜杠转义会产生错误

爱德华_178118

目的是HEAD在旧版HTML网站中Google标记代码之后插入

#!/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

上面将Google标记代码放在应有的位置,但没有单引号:

<!-- 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);

处理后,单引号会丢失:

# 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);

如果将替换'\',则会收到错误消息:

line 13: syntax error near unexpected token `('
line 13: `  gtag(\'js\', new Date());\'

由于我习惯于\继续每一行,因此我不确定转义单引号的反斜杠是否可行,但是我想尝试一下。

如何在Google标记代码中保留这些单引号?

卡米尔·马乔洛夫斯基

来自man 1 bash

将字符括在单引号中可保留引号内每个字符的字面值。即使在单引号之前加反斜杠,也不能在单引号之间引起单引号。

解决方案:将单引号放在双引号内:

  gtag('"'js'"', new Date());\
#      ^        - single quote was opened earlier, this character closes it
#       ^^^^^^  - these are double quotes with content, single quotes are part of the content
#             ^ - this single quote will be closed later
# Do not paste these comments into your script.

在任何需要的地方重复此技巧,它将像:

  gtag('"'config', 'UA-1234567-2'"');\

(请记住,此行继续上一个已打开单引号的行;最后,它保持打开状态,以便在下一行关闭)。

通常,可以只'用双引号引起来,而其他所有内容都用单引号引起,例如:

echo '$A'"'"'$B'"'"'$C'
#     ^^     ^^     ^^ - in single quotes, so no variable expansion here
#         ^      ^     - in double quotes, so ' is possible

结果是$A'$B'$C

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

反斜杠单引号\'

选择单引号的记录仅由双反斜杠转义

单引号和反斜杠

在sed中转义单引号

sed转义:xpath的单引号

sed中的转义反斜杠字符

Python:为什么转义反斜杠会产生 2 个反斜杠?

为什么SQL支持两个单引号以及反斜杠转义

为什么在Java正则表达式中使用单反和三反斜杠转义双引号会产生相同的结果

如何在sed中转义单引号?

如何使用grep双引号在文件中的单引号中包含反斜杠?

如何在单引号和双引号PHP正则表达式模式中正确地转义反斜杠以匹配文字反斜杠

在python中,print(“反斜杠\”)产生错误,但print(“反斜杠\”)不会产生错误

用引号作为sed命令的变量会产生错误

Adobe Javascript:转义反斜杠和引号

在单引号和双引号之前添加反斜杠

错误转义参数周围的单引号

如何从json中删除格式错误的转义反斜杠?

单引号中的'\'反斜杠在shell脚本linux中提供了不可预测的输出

单引号中的'\'反斜杠在shell脚本linux中提供了不可预测的输出

sed中的单引号和双引号

js中的反引号与单引号

applescript / shell中的单引号转义

Microsoft Graph中的单引号转义

从PHP中的API转义单引号(')

如何修复phpMyAdmin SQL中的默认错误字符编码?(SQL语句中的单引号会产生语法错误)

JSON中的引号即使被转义也会引发jQuery错误

bash脚本单引号和反斜杠创建

使用反斜杠或单引号进行字段分隔