在特定单词忽略空格和标签

时间:2018-01-15 07:48:29

标签: unix

我使用unix解析sql脚本。如果FROM是第一个单词,则将其与前一行合并。如果FROM是最后一行,那么我们需要将它与下一行合并。 E.g:

A
FROM 
B

我希望结果为

A FROM B 

避免任何空格和标签。

代码:

cat A.txt | sed ':a;N;$!ba;s|[Ff][Rr][Oo][Mm][\s\t]*\n|FROM |g;s/\n\s*\t*[Ff][Rr][Oo][Mm]/ FROM/g' >B.txt

1 个答案:

答案 0 :(得分:0)

这是一个使用GNU awk和gensub的人。它取代了单词FROM之前和之后的空格,换行符和制表符(由于unix标记而省略了回车符)的组合。它使用空RS作为记录分隔符,这意味着记录以空行或文件末尾结尾。

$ awk 'BEGIN{RS=""}{$0=gensub(/[ \t\n]+(FROM)[ \t\n]+/," \\1 ","g")}1' file
A FROM B

如果您只想要FROM之后的单词:

$ awk 'BEGIN{RS=""}{for(i=1;i<=NF;i++)if($i=="FROM")print $(i+1)}' file
B

如果您的查询在FROM部分值中有WHERE,则两者都会失败,例如:

SELECT * FROM table WHERE variable='DEATH COMES FROM ABOVE';