正则表达式,用于在Select语句中的FROM子句之后提取表

时间:2014-03-19 17:23:47

标签: regex

我在unix中有一个文件,其中包含表单的select语句列表。

Select Colmn, From Table, Where ....
Select Colmn, From Table2, Where ....
Select Colmn, From Table3,Table4 Where ....

等等。

是否有正则表达式可以从文件中提取所有表名?

对于

的情况
Select Colmn, From Table3,Table4 Where ....

我需要Table3和Table4。我相信一个简单的正则表达式不会吗?我可能不得不写一个程序来做这个?这个案子怎么样,

Select Colmn,
  From Table3 ,
  Table4 
   Where ....

这两个表都在多行上。

2 个答案:

答案 0 :(得分:1)

试试这个,你在尝试中遗漏了,

perl -ne '$\ = $/; print for /\sfrom\s+([\w,]+)/ig' input.txt

$ cat input.txt
Select Colmn, From Table, Where ....
Select Colmn, From Table2, Where ....
Select Colmn, From Table3,Table4 Where ....

$ perl -ne '$\ = $/; print for /\sfrom\s+([\w,]+)/ig' input.txt
Table,
Table2,
Table3,Table4

使用sed添加示例以在多行上获取表格:

$ cat input.txt
Select Colmn, From Table, Where ....
Select Colmn, From Table2, Where ....
Select Colmn, From Table3,
Table4
Where ....
$
$ sed -e 's/.*From //' -e 's/Where.*$//' -e '/^$/d' input.txt
Table,
Table2,
Table3,
Table4

答案 1 :(得分:0)

您可以使用以下perl单行来匹配您的模式。

perl -ne '$/=undef; print $_ . "\n" for /(?<=from)\s*(\S*\s*\S*)\s*(?=where)/ig' file

$ cat file
Select Colmn, From Table, Where ....
Select Colmn, From Table2, Where ....
Select Colmn, From Table3,Table4 Where ....
Select Colmn,
  From Table5,
  Table6
   Where ....

$ perl -ne '$/=undef; print $_ . "\n" for /(?<=from)\s*(\S*\s*\S*)\s*(?=where)/ig' file
Table,
Table2,
Table3,Table4
Table5,
  Table6

这应该与您的大多数语句匹配,除非您有一个select语句,其中的表分布在两行以上。在这种情况下,请随意使用正则表达式来满足您的需求。