linux - SeD 正则表达式替换

标签 linux shell sed

我试图用 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=/ 地址部分也不是必需的,因为您在 sed s 命令中指定了它

关于linux - SeD 正则表达式替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20910080/

相关文章:

bash - 在 shell 脚本中迭代名称为folder0100、folder0101 到folder1100 的文件夹

linux - 如何找到当前的虚拟终端

linux - 在 UNIX 中捕获模式的值并写入另一个文件

java - 从 shell 脚本调用 .jar

xml - Unix 中的脚本从文件中删除 XML 标签和内容

Linux:将文件中的第一个字符串替换为包含引号和斜杠的其他文件的内容。

linux - bash 脚本中的 "unexpected operator"(正则表达式)

android - 有适用于 Linux 的 Realm 浏览器吗?

c++ - 如何在 ubuntu 的 vs 代码中链接 c++ 的 fftw3 库?

c - fflush 和 while 循环