如果线长于 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 次的重复计数( ;\{...\}的值请参见shell)。在这些系统上,您可以使用: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实现都只能保证能够处理长度最大为LINE_MAX字节的记录(请参阅getconf LINE_MAXshell 中),但可能支持更长的记录。在 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'

相关内容