如果长于XY,如何删除行?

Lan*_*nes 32 sed

如果一行比例如:2048 个字符长,我如何删除它?

for*_*sck 33

sed '/^.\{2048\}./d' input.txt > output.txt
Run Code Online (Sandbox Code Playgroud)

  • 我收到错误消息 `sed: 1: "/^.\{2048\}..*/d": RE error: invalid repeat count(s)` (Mac OS X) (4认同)

Kus*_*nda 9

这是删除具有 2049 个或更多字符的行的解决方案:

sed '/.\{2049\}/d' <file.in >file.out
Run Code Online (Sandbox Code Playgroud)

正则表达式.\{2049\}将匹配任何包含 2049 个字符的子字符串的行(另一种说法是“至少 2049 个字符”)。该d命令从输入中删除它们,只在输出中生成较短的行。

BSD sed(例如 macOS)在\{...\}操作符中只能处理最多 256 次的重复计数(值RE_DUP_MAX; 见getconf RE_DUP_MAX外壳)。在这些系统上,您可以改为使用awk

awk 'length <= 2048' <file.in >file.out
Run Code Online (Sandbox Code Playgroud)

sed从字面上模仿解决方案awk

awk 'length >= 2049 { next } { print }' <file.in >file.out
Run Code Online (Sandbox Code Playgroud)

请注意,任何awk实现只能保证能够处理长度最多为LINE_MAX字节的记录(参见getconf LINE_MAXshell),但可能支持更长的记录。在 macOS 上,LINE_MAX是 2048。


小智 5

perl -lne "length < 2048 && print" infile > outfile
Run Code Online (Sandbox Code Playgroud)