Reputation: 29
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("%s\n", $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)
Upvotes: 0
Views: 152
Reputation: 181104
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/
...
Upvotes: 2