Awkを使用してキーワードを検索する必要がありますが、大文字と小文字を区別しない(大文字と小文字を区別しない)検索を実行したいと思います。
最善の方法は、検索語(「キーワード」)とawkが同時に読んでいるターゲット行の両方を大文字にすることだと思います。から この質問 私はtoupper
を使用してすべて大文字で印刷する方法を説明しますが、マッチでそれを使用する方法はわかりません。その答えは印刷を示しているだけなので、変数内の大文字のテキスト。
この入力を前提とした例を次に示します。
blablabla
&&&Key Word&&&
I want all
these text and numbers 123
and chars !"£$%&
as output
&&&KEY Word&&&
blablabla
この出力が欲しい:
I want all
these text and numbers 123
and chars !"£$%&
as output
これは私が持っているものですが、toupper
を追加する方法がわかりません。
awk "BEGIN {p=0}; /&&&key Word&&&/ { p = ! p ; next } ; p { print }" text.txt
現在の行である/&&&key Word&&&/
を明示的に使用して、パターン(つまり$0
)を別の式に一致させるように式を置き換えます。
tolower($0) ~ /&&&key Word&&&/
または
toupper($0) ~ /&&&KEY Word&&&/
だからあなたは
awk 'tolower($0) ~ /&&&key Word&&&/ { p = ! p ; next }; p' text.txt
$0
のため、一重引用符が必要です。変数はデフォルトで""
または0
に初期化され、{print}
がデフォルトであるため、BEGINブロックを削除できます。以下のコメントで言及されているアクション。
gawkにはIGNORECASE
組み込み変数があり、これをゼロ以外に設定すると、すべての文字列と正規表現の比較で大文字と小文字が区別されなくなります。あなたはそれを使うことができます:
BEGIN{IGNORECASE=1}
/&&&key Word&&&/ { foo bar baz }
等。ただし、これはgawk
に固有のものですが、私はそれが(より移植性の高い)代替案よりも可読性が高いと感じています。それが問題であるかどうかは、もちろん、完全にあなた次第です。