【问题标题】:sed: -e expression #1, char XX: unterminated `s' commandsed: -e expression #1, char XX: unterminated `s' command
【发布时间】:2017-05-27 03:27:58
【问题描述】:

我正在尝试将正则表达式与命令 sed 一起使用,以将整个文件中的任何 8 个连续数字替换为特定的 8 个数字。我不确定这是否是正确的方法,但我不断收到错误消息,指出命令未终止。知道为什么吗?

sed -i 's/d\{8\}/20170526' ./somefolder/somefile.xml

错误显示 char17 对应于 / 之前的 20170526

【问题讨论】:

  • 试试sed -i 's/d\{8\}/20170526/' ./somefolder/somefile.xml
  • 注意尾随的/ - seds 命令的正确语法是s/replace_this/with_that/,而不是s/replace_this/with_that
  • d 与数字不匹配。也许\d 可以,但最好使用[0-9],甚至更好的[[:digit:]]
  • 另外,第 17 个字符是命令本身的最后一个字符,不包括 sed -i,而这正好在命令末尾缺少 /
  • 来自man sed: s/regexp/replacement/

标签: sed


【解决方案1】:

对于 sed switch 语句,您需要 3 个分隔符(在您的情况下是一个斜杠)。

sed -eE 's/[0-9]{8}/20170526/' ./somefolder/somefile.xml

【讨论】:

  • s 代表“替代”,而不是“切换”。
  • “p”代表迂腐。
猜你喜欢
  • 2012-05-29
  • 1970-01-01
  • 1970-01-01
  • 2017-05-02
  • 2021-02-07
  • 2020-11-25
  • 1970-01-01
  • 1970-01-01
  • 2013-03-08
相关资源
最近更新 更多