繰り返し記号{n}を使用して行を印刷しようとしていますが、機能しません。ために。例えば長さが4文字のすべての行を印刷したい
awk '/^.{4}$/' test_data
上記のコードはそれを印刷していません。繰り返し記号を使用できるように修正するにはどうすればよいですか? awk '/^....$/' test_data
およびawk 'length ==3 ' test_data
これはGNU awk
(gawk)で期待どおりに機能します:
$ printf 'abcd\nabc\nabcde\n' | gawk '/^.{4}$/'
abcd
しかし、POSIX mawk
に近いawk
で失敗します。AFAIKは、Ubuntuシステムのデフォルトです。
$ printf 'abcd\nabc\nabcde\n' | mawk '/^.{4}$/'
$ ## prints nothing
したがって、単純な解決策は、gawk
の代わりにawk
を使用することです。 {n}
表記は、POSIX BRE(基本正規表現)構文の一部ではありません。 grep
もここで失敗するのはそのためです。
$ printf 'abcd\nabc\nabcde\n' | grep '^.{4}$'
$
ただし、これはERE(拡張正規表現)の一部です。
$ printf 'abcd\nabc\nabcde\n' | grep -E '^.{4}$'
abcd
。 Stéphane's answer によると、古いバージョンのEREを使用しています。いずれの場合も、EREを実装していないバージョンのmawk
またはPOSIX awk
で使用されている正規表現のフレーバーはわかりませんが、BREだと思いますawk
を使用しているように見えるか、入力に実際にちょうど4文字の行が含まれていません。これは、たとえば、表示されない空白やグリフのユニコード化が原因で発生する可能性があります。