shi*_*iva 6 grep text-processing
我想使用grep
或其他合适的工具来查找(和打印)线条,而不是基于某种模式,而是基于长度。
假设我有一个包含两行的文件,其中
我正在寻找一个只会输出第 2 行的命令。
Sté*_*las 16
与grep
:
grep -xE '.{120}' < your-file
grep -x '.\{120\}' < your-file # more portable
Run Code Online (Sandbox Code Playgroud)
与awk
:
awk 'length == 120' < your-file
Run Code Online (Sandbox Code Playgroud)
与grep
:
grep -xE '.{0,120}' < your-file
grep -x '.\{0,120\}' < your-file # more portable
Run Code Online (Sandbox Code Playgroud)
与awk
:
awk 'length <= 120' < your-file
Run Code Online (Sandbox Code Playgroud)
对于严格小于 120,请将 120 替换为 119 或替换<=
为<
。
与grep
:
grep -E '.{120}' < your-file # lines that contain a sequence of 120 characters
grep '.\{120\}' < your-file # more portable
Run Code Online (Sandbox Code Playgroud)
还有一些选择:
grep -E '^.{120}' < your-file # lines that start with a sequence of 120 characters
grep '^.\{120\}' < your-file # more portable
Run Code Online (Sandbox Code Playgroud)
grep -xE '.{120,}' < your-file # lines that have 120 or more characters
# between start and end.
grep -x '.\{120,\}' < your-file # more portable
Run Code Online (Sandbox Code Playgroud)
与awk
:
awk 'length >= 120' < your-file
Run Code Online (Sandbox Code Playgroud)
对于严格超过 120 的情况,请将 120 替换为 121 或替换>=
为>
。
那些假设输入是根据语言环境的charmap 正确编码的有效文本。如果输入包含 NUL 字符、不构成有效字符的字节序列、大于LINE_MAX
(字节数)的行或未分隔的最后一行(在grep
;的情况下awk
会添加缺少的分隔符),则您的里程可能会有所不同。
如果您想根据字节数而不是字符数进行过滤,请将语言环境设置为C
或POSIX
( LC_ALL=C grep...
)。
要做到基于石墨烯的簇,而不是字符数,如果你的过滤grep
支持-P
选项,您可以替换E
与P
上方.
用\X
。
相比:
$ locale charmap
UTF-8
$ echo $'e\u0301te\u0301' | grep -xP '\X{3}'
e?te?
$ echo $'e\u0301te\u0301' | grep -xE '.{5}'
e?te?
$ echo $'e\u0301te\u0301' | LC_ALL=C grep -xE '.{7}'
e?te?
Run Code Online (Sandbox Code Playgroud)
(即e?te?
3 个字素簇,5 个字符,7 个字节)。
并非所有grep -P
实现都支持\X
. 有些只支持UTF-8 多字节charmap。
请注意,基于显示宽度的过滤是另一回事,给定字符串的显示宽度取决于显示设备。有关更多信息,请参阅获取字符串的显示宽度。