我想知道是否有可能编写一个100%可靠的sed命令来转义输入字符串中的任何正则表达式元字符,以便它可以在后续的sed命令中使用.像这样:
#!/bin/bash
# Trying to replace one regex by another in an input file with sed
search="/abc\n\t[a-z]\+\([^ ]\)\{2,3\}\3"
replace="/xyz\n\t[0-9]\+\([^ ]\)\{2,3\}\3"
# Sanitize input
search=$(sed 'script to escape' <<< "$search")
replace=$(sed 'script to escape' <<< "$replace")
# Use it in a sed command
sed "s/$search/$replace/" input
Run Code Online (Sandbox Code Playgroud)
我知道有更好的工具可以使用固定字符串而不是模式,例如awk,perl或python.我想证明是否有可能sed.我会说让我们专注于基本的POSIX正则表达式,以获得更多乐趣!:)
我已经尝试了很多东西,但任何时候我都能找到一个打破了我的尝试的输入.我认为保持它是抽象的,因为script to escape不会导致任何人走错方向.
顺便说一下,讨论在这里提出来了.我认为这可能是收集解决方案的好地方,可能会破坏和/或详细说明.
我有文件 A:一个 nginx 配置。在这个文件的某个地方我有{here}
我想用{here}另一个文件 B 的内容替换它:
location /blah {
proxy_pass "https://blah.com";
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试过sed和awk (gsub),但是我遇到了返回/未转义字符的问题。
我找到了一个解决方案,但仅适用于模式,不适用于替换。在这个例子中,它将在我的标记之后附加 fileB 而不是替换它:
sed -i '/{here}/{r fileB
:a;n;ba}' nginx.conf
Run Code Online (Sandbox Code Playgroud)