特定の長さより長い線を探す

特定の長さより長い線を探す

ファイル内の79文字を超える行を見つけることはできますか?

ベストアンサー1

私のテストによると、速度が低下する順序で(UTF-8ロケールとASCII入力を使用するGNUシステムで):

grep '.\{80\}' file

perl -nle 'print if length$_>79' file

awk 'length>79' file

sed -n '/.\{80\}/p' file

perl1(またはawk//マルチバイト文字(busyboxなど)をサポートしていない実装)を除いて、文字の長さをgrep計算します。sedmawk数値(ロケール設定によってLC_CTYPE)代わりにバイト

入力の一部のバイトが有効な文字の一部を形成しない場合(ロケールの文字セットがUTF-8で入力が異なるエンコードの場合に発生する場合があります)、ソリューションとツールの実装によっては、これらのバイト数は次のようになります。 1文字、0、または一致なしでマークされます.

たとえば、UTF-8ロケールで30 asa 0x80バイト、30 bs、0x81バイト、および30 UTF-8 s(0xc3 0xa9でエンコードされている)で構成される行は、éGNU /と一致しません(独立した0x80バイトのため)。セクションが一致しません)、orを使用する場合は長さは30 + 1 + 30 + 1 + 2 * 30 = 122、orを使用する場合は長さは3 * 30 = 90です。.\{80\}grepsed.perlmawkgawk

バイト単位で計算するには、ロケールをに変更しCますLC_ALL=C grep/awk/sed...

これにより、4つのソリューションすべてが上記の行に122文字が含まれていると考えられます。 GNUツールを除いて、perlNUL文字(0x0バイト)を含む行はまだ潜在的に問題があります。


perl動作は環境変数の影響を受ける可能性がありますが、PERL_UNICODE

おすすめ記事