XYより長い線を削除する方法は?

XYより長い線を削除する方法は?

長さが2048文字を超える場合は、行をどのように削除しますか?

答え1

sed '/^.\{2048\}./d' input.txt > output.txt

答え2

2049文字以上の文字を含む行を削除する方法は次のとおりです。

sed '/.\{2049\}/d' <file.in >file.out

正規表現は、.\{2049\}2049 文字の部分文字列 (「少なくとも 2049 文字」を異なる表現) を含むすべての行と一致します。このdコマンドは入力からそれを削除し、出力に短い行だけを生成します。

BSD sed(macOSなど)は、演算子で最大256回まで繰り返し数を処理できます(;\{...\}値はシェルを参照)。これらのシステムでは、次のものを使用できます。RE_DUP_MAXgetconf RE_DUP_MAXawk

awk 'length <= 2048' <file.in >file.out

sed文字通り解決策を模倣しますawk

awk 'length >= 2049 { next } { print }' <file.in >file.out

すべての実装では最大バイト長のレコードのみをawk処理できますが(シェルを参照)、より長いレコードをサポートすることもできます。 macOSでは2048です。LINE_MAXgetconf LINE_MAXLINE_MAX

答え3

perl -lne "length < 2048 && print" infile > outfile

答え4

上記の答えはMac OS X 10.9.5では機能しません。

以下のコードは機能します。

sed '/.\{2048\}/d'

要件はありませんが、参考として提供されます。次のコードは逆に実装できます。

sed '/.\{2048\}/!d'

関連情報