Regex 如何从一个单词打印到另一个单词?(awk)

Regex 如何从一个单词打印到另一个单词?(awk),regex,awk,Regex,Awk,我需要将单词“update”打印到“;” file.txt: 使用下面的awk,我可以指定要解析的块,但我不确定如何从update…直到分号()打印语句 file.awk: 我是这样执行的: awk -f file.awk -F'[ ()]+' file.txt 你能告诉我一些想法吗?我想你的问题是,更新…行被分成多行。这一行可能对你有帮助。不过,您可能需要对其进行一些调整,以适应整个脚本 awk 'p||/^update/{p=1;printf "%s",$0}/;$/&&

我需要将单词“update”打印到“;”

file.txt:

使用下面的awk,我可以指定要解析的块,但我不确定如何从update…直到分号()打印语句

file.awk:

我是这样执行的:

awk -f file.awk -F'[ ()]+' file.txt 

你能告诉我一些想法吗?

我想你的问题是,
更新…
行被分成多行。这一行可能对你有帮助。不过,您可能需要对其进行一些调整,以适应整个脚本

awk 'p||/^update/{p=1;printf "%s",$0}/;$/&&p{p=0;print ""}' file
以您的文件作为输入,它将输出:

update schema.table_name t set "A=123","B=234" where "C=222" and "D=333"and "F=2342";
update schema2.table_name2 t set "A=123","B=234" where "C=222" and "D=333"and "F=2342";

awk惯用的做法是

awk '/update/,/;/' file.txt

只是一个提示,您可以省略空的
BEGIN
块。是的,我知道。我可以在IF(/update/,/;/)这样的IF语句中使用这种方法吗?当我尝试它时,它失败了。我需要将所有内容从更新打印到分号。请按原样尝试脚本。您不需要if语句。@karakfa范围模式将在
update
时失败在一行中。我需要保留语句的缩进。我只需要打印原始SQL语句。谢谢。###Awk脚本(file.Awk):尝试打印该语句,但失败。/]/,/;/{if(/--Host/)printf”%s#%s#“,$3,$5;else if(/update:$/){splitHipen=$2;split(splitHipen,splithipenar,“.”);printf”%s#“,”substr(splithipenar[1],2,length(splithipenar[1])-2);#表所有者printf“%s#”,substr,2,length(splitHipenArr[2])-2);#TABLE_NAME{matched=1;}如果匹配{print;}}}}@Sigularity我的行告诉您如何处理这个案例,您需要调整它以放入脚本中。如果要保留换行符,请使用print,而不是printf。做一些测试。这对让我的脚本看起来更好真的很有帮助。现在它工作了!!非常感谢。
update schema.table_name t set "A=123","B=234" where "C=222" and "D=333"and "F=2342";
update schema2.table_name2 t set "A=123","B=234" where "C=222" and "D=333"and "F=2342";
awk '/update/,/;/' file.txt