使用 sed 和正则表达式更改 bash 中不包括变量的每个符号
Change each symbol excluding variables in bash using sed & regex
我需要像这样更改字符串
Example \%^ $variable ${array[$element]}
变成字符串就好
\E\x\a\m\p\l\e\ \\%\^\ $variable\ ${array[$element]}
因此,在这两种情况下,除了变量之外,我需要转义每个符号。
此外,这很棘手,我需要将它们转义两次,以便使用命令获得结果:
string='Example \%^ $variable ${array[$element]}'
echo `echo $string | sed 'MAGIC'
此外,我已经实现了对所有字符的转义:
echo $(echo $string | sed -r -e 's/(.)/\\/g')
所以,问题是如何不转义 $variables?
我非常擅长正则表达式,所以只需一个工作示例就足够了。但欢迎任何解释。另外,如果我能比你们中的任何人都更快找到答案,我会 post 在这里给出答案。我认为这是一个有趣的难题:)
如果你可以使用 perl
那么就可以像这样轻松完成:
s='Example \%^ $variable"abc" ${array[$element]} ${var}this'
perl -pe 's/$(?:{.*?}|\w+)(*SKIP)(*F)|(.)/\/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", [=12=], RT}' <<< "$s"
\E\x\a\m\p\l\e\ \\%\^\ $variable\"\a\b\c\"\ ${array[$element]} ${var}\t\h\i\s\
我需要像这样更改字符串
Example \%^ $variable ${array[$element]}
变成字符串就好
\E\x\a\m\p\l\e\ \\%\^\ $variable\ ${array[$element]}
因此,在这两种情况下,除了变量之外,我需要转义每个符号。
此外,这很棘手,我需要将它们转义两次,以便使用命令获得结果:
string='Example \%^ $variable ${array[$element]}'
echo `echo $string | sed 'MAGIC'
此外,我已经实现了对所有字符的转义:
echo $(echo $string | sed -r -e 's/(.)/\\/g')
所以,问题是如何不转义 $variables?
我非常擅长正则表达式,所以只需一个工作示例就足够了。但欢迎任何解释。另外,如果我能比你们中的任何人都更快找到答案,我会 post 在这里给出答案。我认为这是一个有趣的难题:)
如果你可以使用 perl
那么就可以像这样轻松完成:
s='Example \%^ $variable"abc" ${array[$element]} ${var}this'
perl -pe 's/$(?:{.*?}|\w+)(*SKIP)(*F)|(.)/\/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", [=12=], RT}' <<< "$s"
\E\x\a\m\p\l\e\ \\%\^\ $variable\"\a\b\c\"\ ${array[$element]} ${var}\t\h\i\s\