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
答え1
式を/&&&key word&&&/
パターンに一致させるために、現在の行を明示的に使用する他の式に置き換えます(例:)。$0
tolower($0) ~ /&&&key word&&&/
または
toupper($0) ~ /&&&KEY WORD&&&/
だからあなたは
awk 'tolower($0) ~ /&&&key word&&&/ { p = ! p ; next }; p' text.txt
$0
""
変数はデフォルトで初期化または最初に使用され、以下の説明で説明されているデフォルトの動作であるため、BEGINブロックを削除できるため、0
一重{print}
引用符が必要です。
答え2
gawkには、IGNORECASE
ゼロ以外の値に設定すると、すべての文字列と正規表現の比較で大文字と小文字を区別しない組み込み変数があります。あなたはそれを使用することができます:
BEGIN{IGNORECASE=1}
/&&&key word&&&/ { foo bar baz }
これは具体的ですが、gawk
mih(より移植性に優れている)代替よりも読みやすいと思います。もちろん、これが問題かどうかは完全にあなた次第です。