【问题标题】:How can I change the 'sed' slash (/) delimiter in insert command? [duplicate]如何更改插入命令中的“sed”斜杠 (/) 分隔符? [复制]
【发布时间】:2013-07-18 11:49:50
【问题描述】:

在sed 的替换命令中将分隔符斜杠 (/) 更改为管道 (|),如下所示

echo hello | sed 's|hello|world|'

如何在下面的sed 插入命令中将分隔符斜杠 (/) 更改为管道 (|)?

echo hello | sed '/hello/i world'

【问题讨论】:

  • 你不能也没有必要
  • @AhmedMasud 我猜现实世界的例子有一个包含斜杠的更复杂的搜索模式。真正的问题可能是如何转义字符串以进行模式匹配,这在其他地方都有介绍(例如backreference.org/2009/12/09/using-shell-variables-in-sed)。
  • @AhmedMasud:是的,你可以,而且这个问题表明需要。

标签: sed


【解决方案1】:

我不确定你提到的命令是什么意思:

echo hello | sed '/hello/i world'

但是,我假设您想对匹配模式 hello 的行执行某些操作。假设您想将匹配模式hello 的行更改为world。为了做到这一点,你可以说:

$ echo -e "something\nhello" | sed '\|hello|{s|.*|world|}'
something
world

为了使用正则表达式匹配行,可以使用以下形式:

/regexp/
\%regexp%

其中% 可以替换为任何其他单个字符(注意前面的\ 在第二种情况下)。

manual 提供了更多详细信息。

【讨论】:

  • i world 后面不应该有分隔符,此时它只是文字。
  • @cbuckley 也许您想将此评论添加到问题中。
  • @tripleee 您所指的示例来自问题。
  • @tripleee 是的-我的错字。很好发现。
【解决方案2】:

问题的答案是:

echo hello | sed '\|hello|i world'

这就是您如何在匹配路径的行之前添加一行,并避免使用转义符出现倾斜牙签综合症。

【讨论】:

    猜你喜欢
    • 2013-05-23
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 2023-04-02
    • 2012-03-13
    相关资源
    最近更新 更多