注意:这个问题是这个问答的补充:如何在给定范围内“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 个字符的行。
使用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)