長さが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_MAX
getconf RE_DUP_MAX
awk
awk 'length <= 2048' <file.in >file.out
sed
文字通り解決策を模倣しますawk
。
awk 'length >= 2049 { next } { print }' <file.in >file.out
すべての実装では最大バイト長のレコードのみをawk
処理できますが(シェルを参照)、より長いレコードをサポートすることもできます。 macOSでは2048です。LINE_MAX
getconf LINE_MAX
LINE_MAX
答え3
perl -lne "length < 2048 && print" infile > outfile
答え4
上記の答えはMac OS X 10.9.5では機能しません。
以下のコードは機能します。
sed '/.\{2048\}/d'
。
要件はありませんが、参考として提供されます。次のコードは逆に実装できます。
sed '/.\{2048\}/!d'
。