Skip to content
Advertisement

multi pattern in sed -n

I know there are quite a few questions asked on this topic. But I need help in a case basis.When i try to put more than 3 pattern in the option, i will get the error like that…

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

i only want to print the words in the brackets..

here is the sed command

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("%sn", $0) } else { printf("%s", $0) } }'

and the output…

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

thanks…

sample output

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

Advertisement

Answer

You have the wrong expectation. You are asking about the “address” portion of a sed instruction, which specifies on which lines sed should apply the following command. sed does not accept a list of addresses there. It accepts either a single address (often, but not always, a regex), or an address range, expressed as a comma-separated start and end address. There is no address form that accepts a comma-delimited list of three or more regexes.

But sed doesn’t need that; you’re making things too complicated. Regexes already naturally provide for matching a list of separate options. That’s what the | operator is for:

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

User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement