Grep a part of file based on string identifiers

consider below file contents

cat myOutputFIle.txt
8 CCM-HQE-ResourceHealthCheck:
Resource List :
No RED/UNKNOWN resource Health entries found
----------------------------------------------------------
9 CCM-TraderLogin-Status:
Number of logins: 0
----------------------------------------------------------
10 CCM HA Status:
Server:XXX.XX.XX.XX not enabled
Server Role:ACTIVE
Server State:AVAILABLE
Network State:GY_PY
----------------------------------------------------------
11 MG-DigitalPortChannel-Status:
No MG's are present hence terminating script
----------------------------------------------------------
12 MM-Operational-State:
ipAddress       requestOperationalState
XX.xx.XX.XX.XX   MS_INTRAFFIC
----------------------------------------------------------
 
 

what i want to achieve is grep a string let say "CCM HA Status:" and display all the lines below it till it reaches "-----------------------------------------"

i implemented partially using sed command. .but its displaying output allong with identifiers..

[root@htmlgen]# sed -n "/CCM HA Status:/,/----------------------------------------------------------/ w tablextract2.sql" <myOutputFIle.txt
[root@ htmlgen]#
[root@duhtmlgen]# cat tablextract2.sql
10 CCM HA Status:
Server:xxx.xx.xxx.xxHA not enabled
Server Role:ACTIVE
Server State:AVAILABLE
Network State:GY_PY
----------------------------------------------------------
[root@ htmlgen]#
 

what the expected output is

Server:xxx.xx.xxx.xxHA not enabled
Server Role:ACTIVE
Server State:AVAILABLE
Network State:GY_PY

similarly if i search for "MM-Operational-State:" it should display below output

ipAddress       requestOperationalState
XX.xx.XX.XX.XX   MS_INTRAFFIC

any help is appreciated.. thanks

sed -n '/CCM HA Status/,/----------/p' file > tablextract.sql
1 Like
awk '/CCM HA Status/ {f=1; next} /^-----/ {f=x} f' infile

If the other pattern is needed, just alter the pattern or add it with a "or" || , just as you need it.

1 Like
$ sed -n "/CCM HA Status:/,/---------/{/CCM HA Status:/d;/---------/d;p;}" file
Server:XXX.XX.XX.XX not enabled
Server Role:ACTIVE
Server State:AVAILABLE
Network State:GY_PY

Or

$ awk ' /CCM HA Status:/,/---------/ { if( !(/CCM HA Status:/ || /---------/) ) print } ' file
Server:XXX.XX.XX.XX not enabled
Server Role:ACTIVE
Server State:AVAILABLE
Network State:GY_PY
1 Like

thanks everyone... :slight_smile: works good