3

Я хочу найти абзац это список файлов. Например, оператор SQL, который выглядит следующим образом:

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

Как я должен игнорировать ввод / новые строки?

Мне нужно найти / напечатать абзац, который начинается с "update" и заканчивается первым появлением ;

3 ответа3

3

grep немного запутан с переводами строки, но вы можете попробовать что-то с awk:

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

Вдохновленный лаконичным решением 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

(не проверено - будьте бдительны)

0

Я использовал grep следующим образом:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .