【问题标题】:sed: -e expression #1, char 23: unterminated `s' command [duplicate]sed:-e 表达式 #1,字符 23:未终止的 `s' 命令 [重复]
【发布时间】:2014-09-17 16:53:26
【问题描述】:

我想用

替换 filter = [ "a/.*/" ]

filter = [ "a\/sda1\/", "a\/sdb\/", "r/\.\*\/"]

我试过这个正则表达式

sed -i -r 's/\s+filter\s=.*/'filter = [ "a\/sda1\/","a\/sdb\/", "r/\.\*\/"]'/' conf 但是得到这个错误。请指教。

sed: -e expression #1, char 23: unterminated `s' command

【问题讨论】:

  • 去掉过滤部分的单引号。
  • @CasimiretHippolyte 收到此错误sed: -e expression #1, char 56: unknown option to s'`
  • 如果您提供示例文本(之前/之后),我们也许可以为您创建一个更好的解决方案。
  • @Jotne 这是我的问题本身。这正是我想做的替换。

标签: regex bash sed


【解决方案1】:

问题是您在该字段中更多地使用 / 分隔符,而不是 / 使用其他分隔符,例如 s#pattern#replace# 。 另一件事是您必须将每个特殊含义字符替换为文字值。 所以下面的命令有助于获得预期的结果。

sed  -r -i -e 's#(filter = )(\[ "a/\.\*/" \])#\1[ "a\/sda1\/", "a\/sdb\/", "r/\.\*\/"]#g' conf

【讨论】:

  • @Harikrishnan,不客气。
猜你喜欢
  • 2019-03-17
  • 2021-06-26
  • 2020-11-25
  • 1970-01-01
  • 1970-01-01
  • 2014-04-06
  • 2017-07-10
  • 2020-11-25
  • 2018-04-25
相关资源
最近更新 更多