【问题标题】:grep 2 words seperated by either space(s) and/or tab(s)grep 由空格和/或制表符分隔的 2 个单词
【发布时间】:2020-08-21 20:28:27
【问题描述】:

我在文件中提取了多个表定义(每个文件一个定义),并且我试图从表定义中获取特定属性。表属性可以是 SET 或 MULTISET,表定义可以是 like

CREATE MULTISET TABLE WEB_APP_OWN_TABLES.VARS_WRK ,NO FALLBACK ,

CREATE SET TABLE WEB_APP_OWN_TABLES.VARS ,NO FALLBACK ,

CREATE 和 MULTISET/SET 之间可以有多个空格和/或制表符

MULTISET/SET 和 TABLE 之间可以有多个空格和/或制表符

单词之间的空格和/或制表符的数量可能因每个定义而异。我使用下面的命令来获取属性,但它可以给我列名,例如“CREATE_BY_TABLE”。有没有更好的方法来做到这一点?

*egrep -i "\<CREATE\>\*.\*\<TABLE\>" WEB_APP_OWN_TABLES~VARS_WRK.sql | egrep -i "SET|MULTISET"*

示例表定义:

*
CREATE SET TABLE DB_NAME.TABLE_NAME ,NO FALLBACK ,
     NO BEFORE JOURNAL,
     NO AFTER JOURNAL,
     CHECKSUM = DEFAULT,
     DEFAULT MERGEBLOCKRATIO,
     MAP = TD_MAP2
     (
      databasename VARCHAR(128) CHARACTER SET LATIN NOT CASESPECIFIC,
      tablename VARCHAR(128) CHARACTER SET LATIN NOT CASESPECIFIC,
      currentperm BIGINT,
      peakperm BIGINT,
      collectdate DATE FORMAT 'yyyy-mm-dd',
      collecttime INTEGER)
UNIQUE PRIMARY INDEX ( databasename ,tablename ,collectdate ,
collecttime );
*

【问题讨论】:

  • 你能显示示例输入、你的命令的结果和你想要的结果吗?当您grep -i "SET" 时,您也会找到 MULTISET。
  • CREATE SET TABLE .,NO FALLBACK , NO BEFORE JOURNAL, NO AFTER JOURNAL, CHECKSUM = DEFAULT, DEFAULT MERGEBLOCKRATIO, MAP = TD_MAP2 ( databasename VARCHAR(128) CHARACTER SET LATIN NOT CASESPECIFIC, tablename VARCHAR(128) CHARACTER SET LATIN NOT CASESPECIFIC, currentperm BIGINT, peakperm BIGINT, collectdate DATE FORMAT 'yyyy-mm-dd', collecttime INTEGER) 唯一主索引 ( databasename ,tablename ,collectdate , collecttime );
  • 该文件可能在其他位置有 SET 这个词,就像上面的评论一样
  • 嗨 Raza,我希望看到示例输出作为您问题的一部分(您可以编辑)。 AFAIK 你想要egrep -i "CREATE.*SET.*TABLE" WEB_APP_OWN_TABLES~VARS_WRK.sql 但我无法测试你的样本输入并将我的结果与你的示例输出(要求)进行比较。

标签: shell grep


【解决方案1】:

以下(扩展的)正则表达式应该符合要求

egrep -i 'create[ \t]+(set|multiset)[ \t]+table' filename.txt

【讨论】:

    【解决方案2】:

    我们使用下面的命令得到了想要的结果

    grep -i -e "\<CREATE\>[[:blank:]]\<MULTISET\>[[:blank:]]\<TABLE\>" -i -e "\<CREATE\>[[:blank:]]\<SET\>[[:blank:]]\<TABLE\>" ${file}|awk '{print $2}'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-02
      • 1970-01-01
      • 1970-01-01
      • 2019-06-21
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多