我需要更改字符串
Example \%^ $variable ${array[$element]}
像
这样的字符串 \E\x\a\m\p\l\e\ \\\%\^\ $variable\ ${array[$element]}
因此,除了这两种情况中的变量外,我需要转义EACH符号。
另外,这很棘手,我需要将它们两次转义,以便通过使用命令来实现结果:
string='Example \%^ $variable ${array[$element]}'
echo `echo $string | sed 'MAGIC'
另外,我已经完成了所有角色的转义:
echo $(echo $string | sed -r -e 's/(.)/\\\\\1/g')
那么,问题是如何不逃避$变量?
我非常擅长正则表达式,所以只需要工作示例即可。但任何解释都是受欢迎的。另外,如果我发现它比你们任何人都快,我会在这里发布答案。我认为这是一个有趣的难题:)
答案 0 :(得分:2)
如果您可以使用perl
,那么可以像这样轻松完成:
s='Example \%^ $variable"abc" ${array[$element]} ${var}this'
perl -pe 's/\$(?:{.*?}|\w+)(*SKIP)(*F)|(.)/\\$1/g' <<< "$s"
<强>输出:强>
\E\x\a\m\p\l\e\ \\\%\^\ $variable\"\a\b\c\"\ ${array[$element]}\ ${var}\t\h\i\s
更新:以下是使用gnu-awk完成此操作的方法:
awk -v RS='\\$({.*?}|[[:alnum:]_]+)' '{gsub(/./, "\\\\&"); printf "%s%s", $0, RT}' <<< "$s"
\E\x\a\m\p\l\e\ \\\%\^\ $variable\"\a\b\c\"\ ${array[$element]} ${var}\t\h\i\s\