Unix命令在匹配模式后打印数据的第二部分

时间:2014-03-14 10:37:30

标签: regex linux bash shell unix

我有一组指定的字符串,其中包含一些要匹配的关键字。

关键词是:字符串将包含“CREATESETTABLE”和点(。)和TABLENAME 在下面的示例字符串中,DATABASE1和DATABASE2是动态的,但之后会出现一个点(。),然后是TABLENAME;但是点(。)和TABLENAME可能会重复n次。

  

的字符串= “CREATESETTABLEDATABASE1.TABLE1(UID)CREATESETTABLEDATABASE1.TABLENAMEuid,CID,MID)DATABASE2.TABLENAME(HI,你好)”

我使用的是:

echo "$string" | awk -F'CREATESETTABLE+[^ ]+.TABLENAME' '{print $2}'

实际输出为:(hi,hello)

预期结果是:uid,cid,mid)DATABASE.TABLENAME(hi,hello)

注意:使用我在此示例中指定的关键字。不要使用其他关键字,如“(”;其他数据只是动态的,我说的是静态的

1 个答案:

答案 0 :(得分:1)

试试这个sed

echo $string | sed 's/.*CREATESETTABLE[^)]\+TABLENAME\(.*\)/\1/g'

如评论中所述,

sed -e 's/.*CREATESETTABLE[^)]\+TABLENAME\(.*\)/\1/g' -e 's/.*CREATEMULTISETTABLE[^)]\+TABLENAME\(.*\)/\1/g'