如何查找(grep)以单词开头并以其他单词结尾的段落并忽略换行符?

如何查找(grep)以单词开头并以其他单词结尾的段落并忽略换行符?

我想查找一个段落是文件列表。例如,一条 SQL 语句如下:

upadte b_table
set number = 100014
where id in (
            select number_desc from t_table
            where id > 100);

我应该如何忽略输入/换行?

我需要查找/打印以“更新”开头并以第一次出现的;

答案1

受到 barryj 的简洁 awk 解决方案的启发:

perl -ne 'print if /update/../;/' *.sql

如果更新语句包含在(空行分隔的)段落中:

perl -00 -ne 'print if /update.*?;/' *.sql

- 从http://uselessuseofcat.com/?p=381

否则,这将打印文件名和更新语句:

perl -ne 'BEGIN{undef $/}; print "$ARGV\t$.\t$1\n" if m/(update.*?;)/mg' *.sql

- 从http://www.commandlinefu.com/commands/view/5087/multi-line-grep

(未经测试 - 买家自负)

答案2

grep 对于换行符有点棘手,但你可以尝试使用 awk:

awk '/update/,/;/' < filename.sql

答案3

我像这样使用 grep:

grep -ihRP  '^(update|( )* update) .* [^;]*;'

相关内容