【问题标题】:Extract data between recursive brackets [duplicate]在递归括号之间提取数据[重复]
【发布时间】:2018-06-29 13:38:48
【问题描述】:

谁能帮我在Linux上提取“(”和“)”之间的文本。 PS - 在数据之间还包含括号()。

文字:

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 );

需要文字:

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

提前谢谢..!! :)

【问题讨论】:

  • 欢迎来到 Stack Overflow。你试过自己解决这个问题吗?我们不是代码编写服务。请使用tour 并阅读How to Ask 并热创建minimal reproducible example。谢谢。
  • 除了@simbabque 的评论,你应该非常认真地对待它,这是一个有很多帖子的共同话题。发帖前请先搜索。简而言之,请参阅Text::Balanced 核心模块。
  • 另一个已知的工具是Regexp::Common

标签: regex perl unix awk sed


【解决方案1】:

在 Perl 中试试这个选项:

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

这会输出CONTENT, q.v。下面的演示。

Demo

【讨论】:

    【解决方案2】:
    awk '/^ +\(/{a=1}/\)$/{a=0;print}a==1'  filename
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-19
      • 1970-01-01
      • 2014-07-22
      • 2015-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多