最佳答案
我想知道是否有可能编写一个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
我知道有更好的工具来处理固定的字符串而不是模式,例如 awk
、 perl
或 python
。我只是想证明这是否可能与 sed
。我会说让我们集中在基本的 POSIX 正则表达式有更多的乐趣!:)
我已经尝试了很多事情,但是每当我能找到一个输入,打破了我的尝试。我认为保持它的抽象作为 script to escape
不会导致任何人走向错误的方向。
顺便说一下,这个讨论是从 给你开始的。我认为这可能是一个收集解决方案的好地方,可能会打破和/或详细说明它们。