2つのパターン間の線(このパターンがある線を除く)を印刷したい場合は、ex
パターンを使用して印刷できます+1
。-1
ギイ。可能ですかawk
?今is_printing
フラグを立てて一つにまとめます。
これはex
、SQLテーブル生成から列定義を取得することです。
$ ex schema/media.sql <<< '/^CREATE TABLE/+1,/^)/-1p'
# id
# SMALLINT
# UNSIGNED
# NOT NULL
# AUTO_INCREMENT
# COMMENT 'The auto-generated ID.',
# parent_id
# SMALLINT
# UNSIGNED
# NULL
# COMMENT 'The ID of the parent album, if any.',
# title
# VARCHAR(255)
# COLLATE utf8_unicode_ci
# NOT NULL
# DEFAULT ''
# COMMENT 'The album title.',
# description
# TEXT
# COLLATE utf8_unicode_ci
# NOT NULL
# COMMENT 'The album''s description.',
awk
同じ操作を実行するコマンドは次のとおりです。
$ awk '/^\)/ { exit; } is_printing; /^CREATE TABLE/ { is_printing = 1; }' schema/media.sql
awkバージョンは読みにくいです。私は慣用語を見逃していますか?sed
このようなことが可能でしょうか? (私はawk
s構文よりs構文を好みます。)sed
答え1
申し訳ありません。各行がスクリプトを個別に渡すので、awkではそれを行うことはできません。
理論的には可能です+xそして、一致するように線を回します。Xもっと多くの入力が実際に動作しますが、そのようなスクリプトをデバッグしたくはありません;-)
注:すべてが同じ行にある可能性がありますが、少なくとも各条件/作業ペアについて新しい行に投票することで、スクリプトを読みやすく理解しやすくなります。