无法找到有效的 sed 模式
我正在尝试对数百个 awstats 配置文件执行字符串替换,并使用 sed 来执行此操作。但是,我无法获得工作模式。
具体来说,我试图将 configs: 中的这一行转换
HostAliases="REGEX[^\.*example\.com$]"
为:
HostAliases="REGEX[\.example\.com$]"
其中 example\.com
是变体。
我已经尝试了 sed 命令的数十种变体。例如:
sed -i 's/^HostAliases="REGEX[^\.*/HostAliases="REGEX[\./' /etc/awstats/*.conf
sed -i 's/REGEX[^\.*/REGEX[\./' /etc/awstats/*.conf
但每次都会收到如下错误: sed: -e expression #1, char 49: untermerated 's' command
这个问题可能与转义某些字符有关,但我可以'不知道哪些是哪些或如何逃脱它们。我想让模式足够具体,以避免意外匹配配置中的其他行,因此包含 HostAliases 会很好。
一些 sed 大师可以指出我正确的方向吗?
I'm trying to perform a string replacement on several hundred awstats config files, and using sed to do so. However, I'm having trouble getting a working pattern.
To be specific, I'm trying to convert this line in the configs:
HostAliases="REGEX[^\.*example\.com$]"
into this:
HostAliases="REGEX[\.example\.com$]"
where example\.com
is variant.
I've tried dozens of variations of sed command. For example:
sed -i 's/^HostAliases="REGEX[^\.*/HostAliases="REGEX[\./' /etc/awstats/*.conf
sed -i 's/REGEX[^\.*/REGEX[\./' /etc/awstats/*.conf
but each time get an error like: sed: -e expression #1, char 49: unterminated 's' command
The issue is probably to do with escaping some of the characters but I can't figure out which ones or how to escape them. I want to make the pattern specific enough to avoid accidentally matching other lines in the config, so including the HostAliases would be good.
Could some sed guru please point me in the right direction?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
's' 的第一个参数本身就是一个正则表达式。所以你必须转义(使用
\
)特殊字符。在您的情况下,它们是[
、\
、.
和*
。所以应该是:The first argument to 's' is itself a regular expression. So you have to escape (with
\
) the special characters. In your case they are[
,\
,.
and*
. So it should be:你是这个意思吗?
输出:
Is this what you mean?
Outputs:
您还需要转义特殊的正则表达式字符,如下所示:
You need to escape special regular expression characters too, like this:
您忘记转义一些字符,例如 ^ 和 [ 。
你的 sed 会是这样的:
You forgot to escape some chars, like ^ and [ .
Your sed would be something like this: