1 | cut
|
2 | ===
|
3 |
|
4 | 连接文件并打印到标准输出设备上
|
5 |
|
6 | ## 补充说明
|
7 |
|
8 | **cut 命令** 用来显示行中的指定部分,删除文件中指定字段。cut 经常用来显示文件的内容,类似于 type 命令。
|
9 |
|
10 | 说明:该命令有两项功能,其一是用来显示文件的内容,它依次读取由参数 file 所指 明的文件,将它们的内容输出到标准输出上;其二是连接两个或多个文件,如`cut fl f2 > f3`将把文件 fl 和 f2 的内容合并起来,然后通过输出重定向符“>”的作用,将它们放入文件 f3 中。
|
11 |
|
12 | 当文件较大时,文本在屏幕上迅速闪过(滚屏),用户往往看不清所显示的内容。因此,一般用 more 等命令分屏显示。为了控制滚屏,可以按 Ctrl+S 键,停止滚屏;按 Ctrl+Q 键可以恢复滚屏。按 Ctrl+C(中断)键可以终止该命令的执行,并且返回 Shell 提示符状态。
|
13 |
|
14 | ### 语法
|
15 |
|
16 | ```shell
|
17 | cut(选项)(参数)
|
18 | ```
|
19 |
|
20 | ### 选项
|
21 |
|
22 | ```shell
|
23 | -b:仅显示行中指定直接范围的内容;
|
24 | -c:仅显示行中指定范围的字符;
|
25 | -d:指定字段的分隔符,默认的字段分隔符为“TAB”;
|
26 | -f:显示指定字段的内容;
|
27 | -n:与“-b”选项连用,不分割多字节字符;
|
28 | --complement:补足被选择的字节、字符或字段;
|
29 | --out-delimiter= 字段分隔符:指定输出内容是的字段分割符;
|
30 | --help:显示指令的帮助信息;
|
31 | --version:显示指令的版本信息。
|
32 | ```
|
33 |
|
34 | ### 参数
|
35 |
|
36 | 文件:指定要进行内容过滤的文件。
|
37 |
|
38 | ### 实例
|
39 |
|
40 | 例如有一个学生报表信息,包含 No、Name、Mark、Percent:
|
41 |
|
42 | ```shell
|
43 | [root@localhost text]# cat test.txt
|
44 | No Name Mark Percent
|
45 | 01 tom 69 91
|
46 | 02 jack 71 87
|
47 | 03 alex 68 98
|
48 |
|
49 | ```
|
50 |
|
51 | 使用 **-f** 选项提取指定字段(这里的 f 参数可以简单记忆为 `--fields`的缩写):
|
52 |
|
53 | ```shell
|
54 | [root@localhost text]# cut -f 1 test.txt
|
55 | No
|
56 | 01
|
57 | 02
|
58 | 03
|
59 | ```
|
60 |
|
61 | ```shell
|
62 | [root@localhost text]# cut -f2,3 test.txt
|
63 | Name Mark
|
64 | tom 69
|
65 | jack 71
|
66 | alex 68
|
67 |
|
68 | ```
|
69 |
|
70 | **--complement** 选项提取指定字段之外的列(打印除了第二列之外的列):
|
71 |
|
72 | ```shell
|
73 | [root@localhost text]# cut -f2 --complement test.txt
|
74 | No Mark Percent
|
75 | 01 69 91
|
76 | 02 71 87
|
77 | 03 68 98
|
78 | ```
|
79 |
|
80 | 使用 **-d** 选项指定字段分隔符:
|
81 |
|
82 | ```shell
|
83 | [root@localhost text]# cat test2.txt
|
84 | No;Name;Mark;Percent
|
85 | 01;tom;69;91
|
86 | 02;jack;71;87
|
87 | 03;alex;68;98
|
88 | ```
|
89 |
|
90 | ```shell
|
91 | [root@localhost text]# cut -f2 -d";" test2.txt
|
92 | Name
|
93 | tom
|
94 | jack
|
95 | alex
|
96 |
|
97 | ```
|
98 |
|
99 | ### 指定字段的字符或者字节范围
|
100 |
|
101 | cut 命令可以将一串字符作为列来显示,字符字段的记法:
|
102 |
|
103 | * **N-** :从第 N 个字节、字符、字段到结尾;
|
104 | * **N-M** :从第 N 个字节、字符、字段到第 M 个(包括 M 在内)字节、字符、字段;
|
105 | * **-M** :从第 1 个字节、字符、字段到第 M 个(包括 M 在内)字节、字符、字段。
|
106 |
|
107 | 上面是记法,结合下面选项将摸个范围的字节、字符指定为字段:
|
108 |
|
109 | * **-b** 表示字节;
|
110 | * **-c** 表示字符;
|
111 | * **-f** 表示定义字段。
|
112 |
|
113 | **示例**
|
114 |
|
115 | ```shell
|
116 | [root@localhost text]# cat test.txt
|
117 | abcdefghijklmnopqrstuvwxyz
|
118 | abcdefghijklmnopqrstuvwxyz
|
119 | abcdefghijklmnopqrstuvwxyz
|
120 | abcdefghijklmnopqrstuvwxyz
|
121 | abcdefghijklmnopqrstuvwxyz
|
122 |
|
123 | ```
|
124 |
|
125 | 打印第 1 个到第 3 个字符:
|
126 |
|
127 | ```shell
|
128 | [root@localhost text]# cut -c1-3 test.txt
|
129 | abc
|
130 | abc
|
131 | abc
|
132 | abc
|
133 | abc
|
134 |
|
135 | ```
|
136 |
|
137 | 打印前 2 个字符:
|
138 |
|
139 | ```shell
|
140 | [root@localhost text]# cut -c-2 test.txt
|
141 | ab
|
142 | ab
|
143 | ab
|
144 | ab
|
145 | ab
|
146 |
|
147 | ```
|
148 |
|
149 | 打印从第 5 个字符开始到结尾:
|
150 |
|
151 | ```shell
|
152 | [root@localhost text]# cut -c5- test.txt
|
153 | efghijklmnopqrstuvwxyz
|
154 | efghijklmnopqrstuvwxyz
|
155 | efghijklmnopqrstuvwxyz
|
156 | efghijklmnopqrstuvwxyz
|
157 | efghijklmnopqrstuvwxyz
|
158 | ```
|
159 |
|
160 | 打印最后5个字符:
|
161 |
|
162 | 遗憾的是, `cut`并没有提供最后字符的支持. 不过我们可以通过字符串反转来实现.
|
163 |
|
164 | ```shell
|
165 | [root@localhost text]# cat test.txt| rev | cut -c -5 | rev
|
166 | vwxyz
|
167 | vwxyz
|
168 | vwxyz
|
169 | vwxyz
|
170 | vwxyz
|
171 | ```
|
172 |
|
173 |
|