如何删除图案的行和其后的N行?

时间:2019-10-27 16:37:16

标签: macos sed yaml

我正在编写一个shell脚本,用于编辑docker-compose.yml文件(在MacOS上运行)。

我正在尝试删除一个位于文件末尾的,看起来像这样的块:

  microservice-itai-ms:
    image: ms-itai-ms:master
    environment:
      NODE_ENV: 'development'
      NPM_TOKEN: 'SECRET'
    ports:
      - "3022:3000"
    depends_on:
      - "redis-cluster"

我正在运行以下命令以删除此块:

sed -i.bak '/.*itai-ms.*/,+9d' docker-compose.yml

9是包括图案行的行数。

运行上面的命令时,出现以下错误:

echo docker-compose.yml | sed -e '/.*itai-ms.*/,+9d'
sed: 1: "/.*itai-ms.*/,+9d
": expected context address

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

如果“ itai-ms”确实没有出现在块之前,并且该块确实在文件末尾,则可以执行以下操作:

pkill sxhkd; setsid sxhkd

编辑:

粗略翻译后,命令是“从sed -i.bak '/itai-ms/,$d' docker-compose.yml /itai-ms/ [即,从包含” itai-ms“的第一行到文件的最后一行] 执行$ [即删除行]“

如果您要将“ itai-ms”作为变量传递(称为d),请尝试以下操作:

X

请注意双引号和转义的"/$X/,\$d"