段落を見つけたいのはファイルのリストです。たとえば、次のようなSQLステートメント。
upadte b_table
set number = 100014
where id in (
select number_desc from t_table
where id > 100);
入力/新しい行を無視するにはどうすればよいですか?
「update」で始まり、;
の最初の出現で終わる段落を検索/印刷する必要があります
grepは改行では少し注意が必要ですが、awkで何かを試すことができます。
awk '/update/,/;/' < filename.sql
バリーの簡潔な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
(未テスト-警告エンプター)
私は次のようにgrepを使用しました:
grep -ihRP '^(update|( )* update) .* [^;]*;'