我有一组指定的字符串,其中有一些关键字要匹配。
关键词是:字符串将包含“CREATESETTABLE”和点(.)以及TABLENAME
在下面的示例字符串中,DATABASE1和DATABASE2是动态的,但之后将出现一个点(.),后跟TABLENAME;但是dot(.)和TABLENAME可能重复n次。
string=“CREATESETTABLEDATABASE1.TABLE1(uid)CREATESETTABLEDATABASE1.TABLENAMEuid,cid,mid)数据库2.TABLENAME(嗨,你好)”
我用的是:

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

实际输出为:(hi,hello)
预计产量为:uid,cid,mid)DATABASE.TABLENAME(hi,hello)
注意:使用我在这个例子中指定的关键字。不要使用其他关键字,如“(”;其他数据是动态的,只是我说的是静态的

最佳答案

试试这个sed

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

如评论所述,
sed -e 's/.*CREATESETTABLE[^)]\+TABLENAME\(.*\)/\1/g' -e 's/.*CREATEMULTISETTABLE[^)]\+TABLENAME\(.*\)/\1/g'

关于regex - Unix命令在匹配模式后打印数据的第二部分,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22402647/

10-14 04:56