小编Shr*_*hri的帖子

bash 中的egrep [[:print:]] 命令有什么用?

我正在开发一个 shell 脚本的增强功能,它可以读取文件并处理它。基本上,输入文件包含一个标题记录,后面跟着一些详细记录。我只想从文件中获取头记录。

$ cat sample_file.txt
header1,header2,header3,header4
value1,value2,value3,value4
Run Code Online (Sandbox Code Playgroud)

现有脚本使用以下命令从文件中获取标头:

$ cat sample_file.txt | head -1 | egrep -o '[[:print:]]' |  tr '\n' '\0'
header1,header2,header3,header4$
Run Code Online (Sandbox Code Playgroud)

我不知道egrep -o '[[:print:]]'在这里做什么。因为即使没有这个egrep命令也可以这样写

按原样打印标题

$ cat sample_file.txt | head -1
header1,header2,header3,header4

Run Code Online (Sandbox Code Playgroud)

或者打印标题而不在末尾换行

$ cat sample_file.txt | head -1 |  tr '\n' '\0'
header1,header2,header3,header4$
Run Code Online (Sandbox Code Playgroud)

的手册页egrep讲述了以下内容,但不清楚何时[[:print:]]应该使用。

最后,在括号表达式中预定义了某些命名的字符类,如下所示。它们的名称是不言自明的,它们是 [:alnum:]、[:alpha:]、[:cntrl:]、[:digit:]、[:graph:]、[:lower:]、[:print:] 、[:punct:]、[:space:]、[:upper:] 和 [:xdigit:]。例如,[[:alnum:]] 表示 [0-9A-Za-z],但后一种形式取决于 C 语言环境和 ASCII 字符编码,而前者独立于语言环境和字符集。(请注意,这些类名称中的方括号是符号名称的一部分,除了界定方括号列表的方括号之外还必须包含方括号。)大多数元字符在列表中会失去其特殊含义。要包含文字 ],请将其放在列表的第一位。类似地,要包含文字 ^,请将其放置在除开头之外的任何位置。最后,要包含文字 - 将其放在最后。

您能帮我理解egrep '[[:print:]]'选项的用法以及我们在哪里使用它吗?

linux shell grep bash

6
推荐指数
1
解决办法
782
查看次数

标签 统计

bash ×1

grep ×1

linux ×1

shell ×1