我有以下unix变量模式。我想根据'CREATE' , 'TABLE' & ','
模式
a ="CREATE TABLE T1, is my TABLE but , DROP TABLE is not CREATE my TABLE T2, is table" # it may keep going but pattern is same ....
echo $a | awk -F'CREATE' '{print $2}' | awk -F'TABLE' '{print $2}' | awk -F',' '{print $1}'
输出
T1
我想打印
T1
T2
...
答案 0 :(得分:1)
使用grep会更容易:
grep -oP 'CREATE .*?TABLE \K\w+' <<< "$a"
T1
T2
答案 1 :(得分:1)
您的样本数据不重要,但您可以使用以下想法:
awk -v RS=, '/TABLE/&&/CREATE/{print $NF}'
<强>阐释:强>
我们将Record Separator
设置为,
,因此它会在它看到的每个,
处拆分该行。因此,您的输入行被视为:
CREATE TABLE T1
is my TABLE but CREATE my TABLE T2
is table
/TABLE/&&/CREATE
是一个正则表达式,用于查看包含单词TABLE
和CREATE
的行。您可以包含仅与TABLE
匹配的字边界,而不是CONSTABLE
。
print $NF
表示打印最后一个字段。 NF
是一个特殊的awk
变量,包含多个字段,$NF
包含最后一个字段的值。
$ echo "CREATE TABLE T1, is my TABLE but CREATE my TABLE T2, is table" | awk -v RS=, '/TABLE/&&/CREATE/{print $NF}'
T1
T2