ファイル内の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
perl
1(またはawk
//マルチバイト文字(busyboxなど)をサポートしていない実装)を除いて、文字の長さをgrep
計算します。sed
mawk
数値(ロケール設定によってLC_CTYPE
)代わりにバイト。
入力の一部のバイトが有効な文字の一部を形成しない場合(ロケールの文字セットがUTF-8で入力が異なるエンコードの場合に発生する場合があります)、ソリューションとツールの実装によっては、これらのバイト数は次のようになります。 1文字、0、または一致なしでマークされます.
。
たとえば、UTF-8ロケールで30 a
sa 0x80バイト、30 b
s、0x81バイト、および30 UTF-8 s(0xc3 0xa9でエンコードされている)で構成される行は、é
GNU /と一致しません(独立した0x80バイトのため)。セクションが一致しません)、orを使用する場合は長さは30 + 1 + 30 + 1 + 2 * 30 = 122、orを使用する場合は長さは3 * 30 = 90です。.\{80\}
grep
sed
.
perl
mawk
gawk
バイト単位で計算するには、ロケールをに変更しC
ますLC_ALL=C grep/awk/sed...
。
これにより、4つのソリューションすべてが上記の行に122文字が含まれていると考えられます。 GNUツールを除いて、perl
NUL文字(0x0バイト)を含む行はまだ潜在的に問題があります。
perl
動作は環境変数の影響を受ける可能性がありますが、PERL_UNICODE