Linux以cut指令截取数据固定位置字段教程与范例

介绍如何在 Linux 系统下以 cut 指令以固定位置或指定字段的方式,抽取出文字数据中需要的信息。

截取固定位置

以下指令可以透过 ls 列出 /etc 目录下的所有文件信息,并且搭配 tail 指令筛出最后 6 行输出:

# 列出 /etc 部分文件信息
ls -l /etc | tail -n6
lrwxrwxrwx 1 root root          23 Jun 26  2019 vtrgb -> /etc/alternatives/vtrgb
-rw-r--r-- 1 root root        4942 Apr  9  2019 wgetrc
drwxr-xr-x 2 root root        4096 Nov 26 11:38 wpa_supplicant
drwxr-xr-x 4 root root        4096 Nov  5 18:58 xdg
drwxr-xr-x 2 root root        4096 Jul 10  2019 zsh
-rw-r--r-- 1 root root         477 Mar 16  2018 zsh_command_not_found

ls -l 的每一行输出中,第 2 个字符到第 10 个字符代表文件的权限信息,如果我们想要将每一行的第 2 个字符到第 10 个字符截取出来,可以使用 cut 搭配 -c 参数指定截取的位置:

# 截取每一行的第 2 个字符到第 10 个字符
ls -l /etc | tail -n6 | cut -c 2-10
rwxrwxrwx
rw-r--r--
rwxr-xr-x
rwxr-xr-x
rwxr-xr-x
rw-r--r--

在指定截取字符位置的时候,也可以只指定起始或结束位置:

# 截取每一行的第 10 个字符以前的数据
ls -l /etc | tail -n6 | cut -c -10
lrwxrwxrwx
-rw-r--r--
drwxr-xr-x
drwxr-xr-x
drwxr-xr-x
-rw-r--r--
# 截取每一行的第 12 个字符以后的数据
ls -l /etc | tail -n6 | cut -c 12-
1 root root          23 Jun 26  2019 vtrgb -> /etc/alternatives/vtrgb
1 root root        4942 Apr  9  2019 wgetrc
2 root root        4096 Nov 26 11:38 wpa_supplicant
4 root root        4096 Nov  5 18:58 xdg
2 root root        4096 Jul 10  2019 zsh
1 root root         477 Mar 16  2018 zsh_command_not_found

若要截取多个字符范围,可以用到号分隔:

# 截取第 2-4 个字符与第 8-10 个字符
ls -l /etc | tail -n6 | cut -c 2-4,8-10

截取指定字段

以下指令可以将 /etc/passwd 文件的前三行输出:

# 输出 /etc/passwd 的前 3 行
head -n3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin

这里输出的每一行数据是以冒号分隔每个字段,如果我们想要将用户名称(第 1 个字段)与 shell 设置(第 7 个字段)截取出来,可以使用 cut 搭配 -f 参数指定截取的字段,并以 -d 参数指定分隔符号(默认是 Tab 字符):

# 截取第 1, 7 字段
head -n3 /etc/passwd | cut -d ':' -f 1,7
root:/bin/bash
daemon:/usr/sbin/nologin
bin:/usr/sbin/nologin

字段在指定时也可以指定连续的范围:

# 截取第 1 到 4 字段
head -n3 /etc/passwd | cut -d ':' -f 1-4
root:x:0:0
daemon:x:1:1
bin:x:2:2
# 截取第 3 栏以后的所有字段
head -n3 /etc/passwd | cut -d ':' -f 3-
0:0:root:/root:/bin/bash
1:1:daemon:/usr/sbin:/usr/sbin/nologin
2:2:bin:/bin:/usr/sbin/nologin
# 截取第 5 栏以前的所有字段
head -n3 /etc/passwd | cut -d ':' -f -5
root:x:0:0:root
daemon:x:1:1:daemon
bin:x:2:2:bin

输出分隔字符

cut 在输出多个字段时,默认会使用 -d 所指定分隔字符,如果想要以不同的分隔字符输出,可以使用 --output-delimiter 参数来指定:

# 指定输出字段分隔字符为 %
head -n3 /etc/passwd | cut -d ':' -f 1,7 --output-delimiter='%'
root%/bin/bash
daemon%/usr/sbin/nologin
bin%/usr/sbin/nologin

排除指定位置、字段

如果想要排除指定的字符位置或字段,可以加上 --complement 参数:

# 排除指定字符
ls -l /etc | tail -n6 | cut -c 2-10 --complement
l 1 root root          23 Jun 26  2019 vtrgb -> /etc/alternatives/vtrgb
- 1 root root        4942 Apr  9  2019 wgetrc
d 2 root root        4096 Nov 26 11:38 wpa_supplicant
d 4 root root        4096 Nov  5 18:58 xdg
d 2 root root        4096 Jul 10  2019 zsh
- 1 root root         477 Mar 16  2018 zsh_command_not_found
# 排除指定字段
head -n3 /etc/passwd | cut -d ':' -f 1,7 --complement
x:0:0:root:/root
x:1:1:daemon:/usr/sbin
x:2:2:bin:/bin

参考数据:GeeksforGeeks

技术教程

UbuntuLinux安装、使用ClamAV杀毒软件clamd常驻服务教程与范例

2022-6-13 21:06:28

技术教程

Pythontempfile暂存盘案、目录产生模组使用教程与范例

2022-6-14 9:53:40



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 yp10086@vip.qq.com 举报,一经查实,本站将立刻删除。

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索