【发布时间】:2012-11-17 19:05:21
【问题描述】:
这就是我想做的:
如果我遇到类似的模式
someVarX: val1
我要插入
someVarY: val2
在下一行
...但问题是:
someVarX: val1 可以在空格(缩进)之前有一个数字,计数在 0 和 N 之间的任意位置,我还想在下一行重复该确切的缩进。因此,如果 someVarX: val1 前面有 3 个空格,那么我也希望 someVarY: val2 前面有 3 个空格。
这是我尝试过的:
s/\n( +)someVarX: val1/\n${1}someVarX: val1\n${1}someVarY: val2/
希望 ${1} 将搜索模式中的捕获组插入替换字符串,但得到:
sed: command garbled: ...
操作系统 os SunOS 5.10。我无法运行sed --version,它告诉我选项--version 是非法的。
有什么想法吗?
【问题讨论】:
-
捕获组被引用为
\1。此外,在您的匹配模式中,'\n' 是否意味着换行?除非您在保持缓冲区上进行操作,否则这将不起作用。对于您似乎正在尝试的内容(您的问题中的示例输入和所需输出使此类事情变得更容易帮助解决,现在我们必须假设我们知道您希望它如何工作)。 -
是的,
\n是新行。我还能如何指示它插入新行? -
1.请编辑您的问题以包含
uname和sed --version的结果。一些 seds 允许在替换部件中使用\n。我对\n的反对意见在第一部分,s/\n( +) someVar...中的模式匹配。 2. sed 依赖\n将每一行分开处理,它不会在行的存在。\n在模式匹配方面唯一起作用的地方是当您将一行保存到保持缓冲区中时......所以...... 3.您向我们展示了您的完整 sed 脚本吗?祝你好运。 -
更新:操作系统 os SunOS 5.10。我无法运行 sed --version,它告诉我选项 --version 是非法的。
-
大多数人认为整个世界都围绕着 Linux。我认为@Thor 的便携式答案应该适用于 Sun。 (使用 Solaris 的标签并包括示例输入和所需的输出,您会得到更及时的响应。)祝你好运