如何“grep”给定范围内的行长?

41 grep bash sed perl

注意:这个问题是这个问答的补充:如何在给定范围内“grep”行长度*不*?


我只需要从长度范围为最小或等于 3 个字符但不长于或等于 10 的文本文件(一个单词列表,用换行符分隔)中获取行。

例子:

输入:

egyezményét
megkíván
ki
alma
kevesen
meghatározó
Run Code Online (Sandbox Code Playgroud)

输出:

megkíván
alma
kevesen
Run Code Online (Sandbox Code Playgroud)

问题:我怎样才能做到这一点bash

Cos*_*tas 59

grep -x '.\{3,10\}'
Run Code Online (Sandbox Code Playgroud)

在哪里

  • -x 匹配模式到整行
  • . 任何符号
  • {3,10} 量化前一个符号的 3 到 10 倍(在任何情况下)


小智 12

使用 egrep

egrep '^.{3,10}$'
Run Code Online (Sandbox Code Playgroud)

匹配从开始到结束的 3 个或更多字符但小于或等于 10 个字符的行。


Kus*_*nda 5

使用awk

awk 'length >= 3 && length <= 10' file
Run Code Online (Sandbox Code Playgroud)

默认情况下,该length语句将返回$0(当前记录/行)的长度,代码使用它来测试行的长度是否在给定范围内。如果像这样的测试没有相应的操作块,则默认操作是打印记录。

对给定数据进行测试:

awk 'length >= 3 && length <= 10' file
Run Code Online (Sandbox Code Playgroud)

与 Perl 类似:

$ awk 'length >= 3 && length <= 10' file
megkíván
alma
kevesen
Run Code Online (Sandbox Code Playgroud)