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


28

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


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

例:

输入:

egyezményét
megkíván
ki
alma
kevesen
meghatározó

输出:

megkíván
alma
kevesen

问题:我该怎么做bash


9
grep -x '.\{3,10\}'
Costas

@Costas很棒,sed也是如此。发表完整答案。
Orion

Answers:


37
grep -x '.\{3,10\}'

哪里

  • -x 将图案匹配到整行
  • . 任何符号
  • {3,10} 量化前一个符号的3到10倍(如果有的话)

10

使用egrep

egrep '^.{3,10}$'

从开始到行尾匹配3个或更多字符,但少于或等于10个字符。


1

使用sed

sed '/^.\{3,10\}$/!d'

要么:

sed -r '/^.{3,10}$/!d'

0

使用awk

awk 'length >= 3 && length <= 10' file

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

对给定数据进行测试:

$ awk 'length >= 3 && length <= 10' file
megkíván
alma
kevesen

与Perl类似:

$ perl -lne '$l=length($_); print if ($l >= 3 && $l <= 10)' file
megkíván
alma
kevesen
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.