我试图用 sed 在配置文件中做一个非常简单的替换: 文件中的行是:
local startday=os.time{year=2014, month=01, day=02, hour=00}
我想从 bash 脚本中读取年/月/日并在此文件中替换它们,但即使是最简单的 sed 命令也不起作用。我尝试的是:
sed -e '/day=/ s/=[0-9]{2}/=$DAY_FROMSCRIPT/' configfile
但有趣的是,如果我指定:
sed -e '/day=/ s/=02/=$DAY_FROMSCRIPT/' configfile
行得通。谁能解释一下为什么?
最佳答案
你原来的命令有几个错误:
- 大括号必须被转义
\{
或者您必须使用扩展的正则表达式(-r
在 Linux 上) - 您必须在正则表达式中使用
day=
,否则替换也会匹配month=
! - 你必须使用双引号,这样变量扩展
$DAY_FROMSCRIPT
才能工作
代码:
sed "s/day=[0-9]\{2\}/day=$DAY_FROMSCRIPT/" configfile
如果您还想替换月份和年份,只需在管道中连接 sed 命令:
sed "s/day=[0-9]\{2\}/day=$DAY_FROMSCRIPT/" configfile |
sed "s/month=[0-9]\{2\}/month=$MONTH_FROMSCRIPT/" |
sed "s/year=[0-9]\{2\}/year=$YEAR_FROMSCRIPT/"
注意事项:
- sed
-e
选项不是必需的 /day=/
地址部分也不是必需的,因为您在 seds
命令中指定了它
关于linux - SeD 正则表达式替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20910080/