相关疑难解决方法(0)

是否可以使用sed可靠地转义正则表达式元字符

我想知道是否有可能编写一个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,perlpython.我想证明是否有可能sed.我会说让我们专注于基本的POSIX正则表达式,以获得更多乐趣!:)

我已经尝试了很多东西,但任何时候我都能找到一个打破了我的尝试的输入.我认为保持它是抽象的,因为script to escape不会导致任何人走错方向.

顺便说一下,讨论在这里提出来了.我认为这可能是收集解决方案的好地方,可能会破坏和/或详细说明.

regex sed

54
推荐指数
2
解决办法
1万
查看次数

用文件内容替换字符串

我有文件 A:一个 nginx 配置。在这个文件的某个地方我有{here}

我想用{here}另一个文件 B 的内容替换它:

location /blah {
     proxy_pass "https://blah.com";
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试过sedawk (gsub),但是我遇到了返回/未转义字符的问题。

我找到了一个解决方案,但仅适用于模式,不适用于替换。在这个例子中,它将在我的标记之后附加 fileB 而不是替换它:

sed -i '/{here}/{r fileB
:a;n;ba}' nginx.conf
Run Code Online (Sandbox Code Playgroud)

awk sed substitution

1
推荐指数
1
解决办法
2812
查看次数

标签 统计

sed ×2

awk ×1

regex ×1

substitution ×1