web-dev-qa-db-ja.com

(grep)段落をWordで始まり、他のWordで終わり、改行を無視する方法は?

段落を見つけたいのはファイルのリストです。たとえば、次のようなSQLステートメント。

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

入力/新しい行を無視するにはどうすればよいですか?

「update」で始まり、;の最初の出現で終わる段落を検索/印刷する必要があります

3
user84129

grepは改行では少し注意が必要ですが、awkで何かを試すことができます。

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

バリーの簡潔なawkソリューションに触発されました:

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

更新ステートメントが(空行で区切られた)段落に含まれている場合:

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

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

それ以外の場合、これはファイル名と更新ステートメントを出力します。

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

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

(未テスト-警告エンプター)

3
RedGrittyBrick

私は次のようにgrepを使用しました:

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