sed正则表达式没有按预期工作

时间:2017-05-28 12:30:55

标签: regex sed

我有一个yaml文件,它有以下文字:

  /data/app0:
     server: x.y.z.p
     share: /data/app0
     mount: /data/app/0

我希望得到以下输出:

  /data/app0:
     server: x.y.z.p
     share: /data/app0
     mount: /data/app/0
     options: _netdev,noatime,nodiratime

我尝试了以下这是一个简单的正则表达式使用-i和a但是它抛出了一个错误:

[user@jump nodes]$ cat test.yaml
  /data/app0:
     server: x.y.z.p
     share: /data/app0
     mount: /data/apps/0
  /data/app1:
     server: x.y.z.p
     share: /data/app1
     mount: /data/apps/1
  /data/app2:
     server: x.y.z.p
     share: /data/app2
     mount: /data/apps/2
  /data/app3:
     server: x.y.z.p
     share: /data/app3
     mount: /data/apps/3

[user@jump nodes]$ sed -i '/mount: /data/app/*/a \
options: _netdev,noatime,nodiratime \' test.yaml
sed: -e expression #1, char 11: extra characters after command
[user@jump nodes]$

不知道为什么会出错?

1 个答案:

答案 0 :(得分:0)

Sed使用/作为分隔符,因此它认为您的搜索模式为/mount :/。所以你的命令是d(删除),额外的字符(字符11)是a中的第一个data。使用反斜杠转义路径斜杠。而且我认为你不应该逃避最后的单引号:

[user@jump nodes]$ sed -i '/mount: \/data\/app\/*/a \
options: _netdev,noatime,nodiratime' test.yaml