使用空白行UNIX搜索模式

时间:2016-02-02 05:57:09

标签: shell unix sh

我必须在UNIX框中找到.sql文件,这两个特定的行模式之间有一个空行。

例如:

以下代码没问题。

CREATE VIEW V_NAME_LAST
AS
SELECT COLUMN_NAME FROM TABLE

下面的代码不合适,因为我们有空格黑白AS和SELECT。

CREATE VIEW V_NAME_LAST
AS

SELECT COLUMN_NAME FROM TABLE

你能告诉我一个简单的grep模式搜索来找到这样的文件吗?

另外,提示我们将有空白行的文件很好,我只需要b / w AS SELECT

2 个答案:

答案 0 :(得分:0)

^ *$

由于您只对这些文件的名称感兴趣,因此您应该使用grep的-l选项。

答案 1 :(得分:0)

我会使用一些Perl脚本,如下所示:

perl -0777 -wne '/(\bAS\n\nSELECT\b)/ and print "$ARGV\n"' file1 file2 ...

-0777打开file mode,以便读取整个文件并将其视为单个记录。 -w会针对我的代码所做的任何不良事件发出警告。 -nwhile循环中包含以下代码。而-e意味着下一步要执行的程序。

该计划说...... "如果你找到" AS"然后是两个新行,然后单词" SELECT",打印您正在查找的文件的名称"

所以,您可以像find一样使用它:

find ~ -name \*.sql -exec perl -0777 -wne '/(\bAS\n\nSELECT\b)/ and print "$ARGV\n"' {} \;

如果您的find支持,请将最终的\;替换为+,它会更快地运行。