【问题标题】:sed: -e expression #1, char 66: unterminated `s' commandsed: -e 表达式 #1, char 66: 未终止的 `s' 命令
【发布时间】:2015-11-20 02:54:00
【问题描述】:

经过一些文本操作后,我得到了输出:“75 queen”。我是这样发送的:

..( 75 queen ).. | sed 's/ \([0-9]*\) \(q.*) /The word \2 with \1 appearances.'

对于此代码,我收到错误“sed: -e expression #1, char 66: unterminated `s' command。 什么意思?

【问题讨论】:

  • 两件事:你在末尾缺少一个/,并且在q.* 之后有一个未转义的右括号。

标签: linux bash sed error-handling


【解决方案1】:

您的sed 表达式中有几个问题需要解决:

  1. 替换命令必须以/ 加上任何修饰符结尾。

  2. 有几种正则表达式“风味”,sed 使用基本 POSIX 正则表达式,这意味着应该转义 () 以捕获匹配组。详情请查看answer

  3. 您似乎想捕获75queen。为此,您需要指定第一组应匹配任意数量的数字,第二组应捕获 q 后跟任意数量的字符。 * 将匹配 0 个或多个重复,+(应该转义)将匹配 1 个或多个重复。

考虑到这一点,下面的sed 表达式应该可以解决问题:

echo '..( 75 queen )..' | sed 's/ \([0-9]\+\) \(q.*\) /The word \2 with \1 appearances./'

【讨论】:

    猜你喜欢
    • 2020-11-25
    • 1970-01-01
    • 2017-07-10
    • 2021-06-26
    • 2019-03-17
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多