如果一行的长度超过 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 次的重复计数( ;\{...\}
的值请参见shell)。在这些系统上,您可以使用: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
实现都只能保证能够处理长度最大为LINE_MAX
字节的记录(请参阅getconf LINE_MAX
shell 中),但可能支持更长的记录。在 macOS 上,LINE_MAX
是 2048。
答案3
perl -lne "length < 2048 && print" infile > outfile
答案4
上述答案在 Mac OS X 10.9.5 上不适用于我。
下面的代码确实有效:
sed '/.\{2048\}/d'
。
虽然没有要求,但是提供参考,反向可以实现如下代码:
sed '/.\{2048\}/!d'
。