我使用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
答案 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';