-1

Can anyone help me with extracting text between "(" and ")" on linux. PS - In between data also contains brackets ().

Text:

CREATE SET TABLE xxxxx.xxxxxx ,NO FALLBACK ,
     NO BEFORE JOURNAL,
     NO AFTER JOURNAL,
     CHECKSUM = DEFAULT,
     DEFAULT MERGEBLOCKRATIO
     (

     aflt_type_cd CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC TITLE 'AFFILIATE TYPE CODE',
      aflt_co_cd CHAR(1) CHARACTER SET LATIN NOT CASESPECIFIC TITLE 'AFFILIATE COMPANY CODE',
      cris_ind CHAR(1) CHARACTER SET LATIN NOT CASESPECIFIC TITLE 'CUSTOMER RECORDS INFORMATION SYSTEM INDICATOR',
      cabs_ind CHAR(1) CHARACTER SET LATIN NOT CASESPECIFIC TITLE 'CARRIER ACCESS BILLING SYSTEM INDICATOR',
      src_feed_cd CHAR(1) CHARACTER SET LATIN NOT CASESPECIFIC TITLE 'SOURCE FEED CODE',
      intgt_ind CHAR(1) CHARACTER SET LATIN NOT CASESPECIFIC TITLE 'INTEGRATED INDICATOR' NOT NULL,
      lst_updt_by CHAR(10) CHARACTER SET LATIN NOT CASESPECIFIC TITLE 'LAST UPDATED BY' NOT NULL,
      load_dt_tm TIMESTAMP(6) TITLE 'LOAD DATE TIME' NOT NULL,
      updt_dt_tm TIMESTAMP(6) TITLE 'UPDATE DATE TIME' NOT NULL)
PRIMARY INDEX nupi_bill_sys ( bill_sys_geo_id );

Text required :

aflt_type_cd CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC TITLE 'AFFILIATE TYPE CODE',
      aflt_co_cd CHAR(1) CHARACTER SET LATIN NOT CASESPECIFIC TITLE 'AFFILIATE COMPANY CODE',
      cris_ind CHAR(1) CHARACTER SET LATIN NOT CASESPECIFIC TITLE 'CUSTOMER RECORDS INFORMATION SYSTEM INDICATOR',
      cabs_ind CHAR(1) CHARACTER SET LATIN NOT CASESPECIFIC TITLE 'CARRIER ACCESS BILLING SYSTEM INDICATOR',
      src_feed_cd CHAR(1) CHARACTER SET LATIN NOT CASESPECIFIC TITLE 'SOURCE FEED CODE',
      intgt_ind CHAR(1) CHARACTER SET LATIN NOT CASESPECIFIC TITLE 'INTEGRATED INDICATOR' NOT NULL,
      lst_updt_by CHAR(10) CHARACTER SET LATIN NOT CASESPECIFIC TITLE 'LAST UPDATED BY' NOT NULL,
      load_dt_tm TIMESTAMP(6) TITLE 'LOAD DATE TIME' NOT NULL,
      updt_dt_tm TIMESTAMP(6) TITLE 'UPDATE DATE TIME' NOT NULL

Thanks in advance..!! :)

Kaushik Nayak
  • 30,772
  • 5
  • 32
  • 45
  • 5
    Welcome to Stack Overflow. Have you tried solving this yourself? We're not a code writing service. Please take the [tour] and read [ask] and hot to create a [mcve]. Thank you. – simbabque Jan 20 '18 at 12:07
  • Apart from the comment by @simbabque, which you should take very seriously, this is a common topic with many posts. Please search before posting. In short, see [Text::Balanced](https://perldoc.perl.org/Text/Balanced.html) core module for this. – zdim Jan 21 '18 at 04:42
  • Another known tool is [Regexp::Common](http://search.cpan.org/~abigail/Regexp-Common-2017060201/lib/Regexp/Common.pm) – zdim Jan 21 '18 at 04:48

2 Answers2

0

Try this option in Perl:

$text = "CREATE SET TABLE xxxx.xxxx ( CONTENT )";
if ($text =~ /CREATE SET TABLE [^(]* \(([^)]*)\)/) {
    print $1;
}

This outputs CONTENT, q.v. the demo below.

Demo

Tim Biegeleisen
  • 502,043
  • 27
  • 286
  • 360
-1
awk '/^ +\(/{a=1}/\)$/{a=0;print}a==1'  filename
Vicky
  • 1,298
  • 1
  • 16
  • 33