bash - 使用 sed 转义字符串变量中的符号

标签 bash sed

我正在用数组变量中的值替换文本 SUBJECT,如下所示:

#!/bin/bash

# array of subjects, the ampersand causes a problem.
subjects=("Digital Art" "Digital Photography" "3D Modelling & Animation")

echo $subjects[2] # Subject: 3D Modelling & Animation

sed -i -e "s/SUBJECT/${subjects[2]}/g" test.svg

生成的文本不是替换文本 SUBJECT,而是如下所示:

3D Modelling SUBJECT Animation

如何在 sed 中将 & 符号作为文字 & 并使其正确回显?

最佳答案

问题是替换文本中存在 && 使 sed 在替换中放置完全匹配的文本,因此 SUBJECT 出现在输出中。

你可以使用这个技巧:

sed -i "s/SUBJECT/${subjects[2]//&/\\&}/g" test.svg

${subjects[2]//&/\\&} 的第二个元素中的每个 & 替换为 \& >subjects 调用 sed 替换之前的数组。

关于bash - 使用 sed 转义字符串变量中的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44374914/

相关文章:

linux - disown 和注销后是否可以看到 stdout 的输出?

python - 用于在文件夹中查找文件的 Bash 脚本

linux - 使用 sed/awk 从每一行中提取多个字符串

bash - SED 删除字符串前的所有内容

Linux:使用行号作为变量将变量附加到行尾

regex - bash:对于 txt 文件中的每一行匹配一个正则表达式并将其保存到一个变量数组

bash - Bash脚本错误检查

bash - `sed -i -e` 和 `sed -ie` 有什么区别?

Bash 脚本 – "/bin/bash^M: bad interpreter: No such file or directory"

linux - 如何遍历两组数据?