【问题标题】:multi pattern in sed -nsed -n 中的多模式
【发布时间】:2018-08-28 03:51:53
【问题描述】:

我知道有很多关于这个话题的问题。但我需要根据情况提供帮助。当我尝试在选项中放置超过 3 种模式时, 我会得到这样的错误......

sed: -e expression #1, char 24: unknown command: `,'

我只想打印括号中的单词..

这里是 sed 命令

sed -n '/QUEUE/,/CURDEPTH/,/DESCR/ {
            s/QUEUE(\(.*\))\(.*TYPE(.*)\)/\1/
            s/QUEUE(\(.*\))/\1/
            s/TYPE(.*).*CURDEPTH(\(.*\))/\1/
            s/CURDEPTH(\(.*\))/\1/
            s/TYPE(.*).*DESCR(\(.*\))/\1/
            s/DESCR(\(.*\))/\1/
         p
       }
    ' | awk '{ if ((NR %2) == 0) { printf("%s\n", $0) } else { printf("%s", $0) } }'

还有输出...

test.msg.queue   0)                             DESCR(TQ : 001

谢谢...

样本输出

1 : dis q(test.msg.queue) CURDEPTH DESCR
AMQ0086: Display Queue details.
   QUEUE(test.msg.queue)                 TYPE(QLOCAL)
   CURDEPTH(0)                             DESCR(TQ : 001)

【问题讨论】:

  • 如果您添加少量示例行(例如 3-5)并完成示例的预期输出,这将有所帮助 - 这将有助于增加您的问题的清晰度,并有助于在回答之前测试解决方案..来自你发布的内容,看起来你需要/QUEUE\|CURDEPTH\|DESCR/
  • /QUEUE/,/CURDEPTH/,/DESCR/ 应该指的是什么“范围”?每一行都以包含QUEUE 的行开头,然后结束……什么时候?您能描述一下您的目标要实现的目标吗?
  • 感谢 ghoti 的帮助,我的目标是让文本脱离括号.. Sundeep 解决方案似乎有效,但输出仍然与“test.msg.queue 0) DESCR(TQ:001”相同,我想我帮助检查 X_X

标签: regex linux bash awk sed


【解决方案1】:

你有错误的期望。您正在询问sed 指令的“地址”部分,它指定sed 应在哪些行上应用以下命令。 sed 不接受那里的地址列表。它接受单个地址(通常但不总是,正则表达式)或地址 range,表示为逗号分隔的开始和结束地址。没有接受由逗号分隔的三个或更多正则表达式列表的地址形式。

但是sed 不需要那个;你把事情弄得太复杂了。正则表达式已经自然地提供了匹配单独选项列表的功能。这就是 | 运算符的用途:

sed -n '/QUEUE\|CURDEPTH\|DESCR/ {
            s/QUEUE(\(.*\))\(.*TYPE(.*)\)/\1/

...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    • 2012-03-07
    • 1970-01-01
    • 2014-11-18
    • 2019-01-22
    • 2013-06-20
    相关资源
    最近更新 更多