在Unix中提取包含在模式和分隔符之间的字符串

时间:2015-02-19 02:06:45

标签: regex bash perl awk sed

我正在尝试解析SQL源或Shell脚本,尝试使用bash/awk/sed/perl从中提取对象名称。

示例文本 - 假设文本文件包含如下命令:

CALL DBUSER.Compiled_Object_Name('....parameters...');

我的目的是解析文本文件以一次获取一行。我在bash中使用Do While来实现这一目标。

下一步是解析这样一行以提取下面的字符串,即对象名称。

DBUSER.Compiled_Object_Name

此处,DBUSER是重复模式,始终由(

分隔

请建议。

1 个答案:

答案 0 :(得分:1)

$ cat test.sql 
CALL DBUSER.Compiled_Object_Name('....parameters...');
CALL DBUSER.Object_Name_1('....parameters...');
# WHATEVER
CALL DBUSER.Compiled_Object_Name('....parameters...');

grep的/ EGREP:

grep -o 'DBUSER\.[^\(]\{1,\}' test.sql
egrep -o 'DBUSER\.[^\(]+' test.sql

的Perl:

perl -ne 'next unless /DBUSER/; ($m) = $_ =~ /(DBUSER\.[^\(]+)/; print "$m\n";' test.sql

两者的结果:

DBUSER.Compiled_Object_Name
DBUSER.Object_Name_1
DBUSER.Compiled_Object_Name