我有一个文件 nginx.conf 如下
load_module /usr/lib/nginx/modules/ngx_stream_module.so;
worker_processes 1;
events {
worker_connections 1024;
}
stream {
upstream redis {
server 34.73.56.224:6379;
}
server {
listen 8888 so_keepalive=on;
proxy_pass redis;
}
}
我正在尝试编写一个脚本,以便当我运行时bash swap.sh 400
,当前所在的地址34.73.56.224
将被替换为400
;然而,它不会一直是这个数字——它可能会说一个不同的地址,或者它可能会说redis。注意::6379
运行脚本后应该仍然存在。这是我现在所拥有的:
#!/usr/bin/env bash
PARAM=$1
sed -i'.conf' "s/server .+:/server $PARAM:/" nginx.conf
但是,这不起作用,我认为这是因为我没有正确使用正则表达式命令。有人能指出我正确的方向吗?
答案1
尝试:
sed -E -i'.conf' "s/server .+:/server $PARAM:/" nginx.conf
默认情况下,sed 使用基本正则表达式(布雷)。在 BRE 中,a+
是字面上的加号。因此,.+
匹配任何.
后跟加号的字符 ( )。
你想要一些不同的东西:你想要.+
匹配一个或多个任何字符,其中.
匹配任何字符并+
指示一个或多个。为了得到这个,你需要扩展正则表达式(ERE)。 -E
告诉 sed 使用 ERE。