如何使用 grep 搜索同时存在于单行和多行中的字符串?

如何使用 grep 搜索同时存在于单行和多行中的字符串?

我正在搜索大量 SQL 脚本来查找数据依赖性,但由于脚本的变化,我遇到了一个有趣的问题。

如果我搜索单词FROM,它只会返回该单词所在的行。因此,以下内容只会打印第一行和第三行,而我需要将第一行以及第三行和第四行一起打印。任何帮助,将不胜感激!

SELECT * FROM TABLE1

SELECT *

FROM

TABLE 2

答案1

SQL 语句通常以;.

我们可以利用awk这一事实来读取;分隔记录并测试每条记录是否存在 sting FROM。如果找到这样的记录,我们可以将所有连续空格压缩为单个空格,将所有换行符更改为单个空格,然后输出:

$ awk 'BEGIN { RS = ";" } /FROM/ { gsub("\n+|  +", " "); print }' statements.sql

使用以下文件对此进行测试

SELECT * FROM TABLE1;

SELECT *

FROM

TABLE2;

结果是

SELECT * FROM TABLE1
 SELECT * FROM TABLE2

相关内容