awk繰り返し{n}が機能しません

awk繰り返し{n}が機能しません

繰り返し記号{n}を使用してこの行を印刷しようとしましたが、機能しません。のための。たとえば、長さが4文字のすべての行を印刷したいとします。

 awk '/^.{4}$/' test_data

上記のコードはそれを印刷しません。重複記号を使用できるように変更するにはどうすればよいですか?私はawk '/^....$/' test_data次の選択肢を知っていますawk 'length ==3 ' test_data

ベストアンサー1

~によるとGNU Awkユーザーガイド:機能履歴、正規表現範囲演算子のサポートがバージョン3.0に追加されましたが、最初は明示的なコマンドラインオプションが必要でした。

新しいコマンドラインオプション:

  • 新しいコマンドラインオプション:
    • --lint-oldオプションは、awkの元のバージョン7 Unixバージョンでは利用できなかった設定を警告するために使用されます(V7 / SVR3.1を参照)。
    • awk の BWK -m オプションです。 (Brianは当時Bell Labsにいました。)この文は後で彼のawkとgawkから削除されました。
    • --re-intervalオプションは、正規表現に間隔式を提供するために使用されます(正規表現演算子を参照)。
    • --compatのより良い名前で--traditionalオプションを追加しました(オプションを参照)。

gawk4.0では

間隔式が基本正規表現の一部になります。

3.xを使用しているので、gawk次のものを使用する必要があります。

awk --re-interval '/^.{4}$/'

または

awk --posix '/^.{4}$/'

または(@StéphaneChazelasのおかげで)ポータブルソリューションが必要な場合は、次のようにします。

POSIXLY_CORRECT=anything awk '/^.{4}$/'

(他の実装ではエラーが発生する--posix可能性があるためです。)--re-intervalawk

おすすめ記事