二重引用符でawkを使用するときにパターンを否定する方法

二重引用符でawkを使用するときにパターンを否定する方法

次のファイルがあります。

$ cat files
foo.txt
bar.js

bash awkを使用して.js

awkは一重引用符を使用するとうまく機能します。

$ awk '$1 !~ /.js$/ {print $1}' files
foo.txt

ただし、二重引用符 awk を使用する場合:

$ awk "\$1 !~ /.js$/ {print \$1}" files
-bash: !~: event not found

答え1

しないでください。

単純な変数パラメータの使用:

$ awk -v exclude='\.js$' '$1 !~ exclude' file
foo.txt

または、環境を介してスキーマをインポートします(含まれているスキーマをサポートする便利な方法\\)。

$ exclude='\.js$' awk '$1 !~ ENVIRON["exclude"]' file

コメントで述べたように(現在削除済み):

$ awk "\$1 !""~ /.js$/ {print \$1}" file

うまくいくかもしれませんが、いいえ推奨される方法です。ただ簡単です。 醜い。使い方を学ぶ正しい方法。

答え2

あなたは属の何百万人の一つです歴史的拡張は、ユーザーの1000人のうち1人だけが使用しましたが、デフォルトで有効になっています。

set +Hシェル起動ファイルでこれを有効または無効にするのが最善ですset +o histexpand。これにより、!奇妙な問題なく使用できます。

関連情報