19

Linux cut 命令详解

 4 years ago
source link: http://os.51cto.com/art/202007/621337.htm
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

yAnuqyA.jpg!web

cut 命令在Linux和Unix中的作用是从文件中的每一行中截取出一些部分,并输出到标准输出中。我们可以使用 cut 命令从一行字符串中于以字节,字符,字段(分隔符)等单位截取一部分内容出来。

在本文中,我们通过一些例子来了解 cut 命令的使用,这些使用方法在我们的日常工作中也是非常常用的。

Cut 命令和语法

cut 命令的基本语法如下:

$ cut OPTION... [FILE]... 

我们先来了解一下 cut 的一些选项,cut 命令必须要指定选项才能执行。

-f : 提取指定的字段,cut 命令使用 Tab 作为默认的分隔符。

-d : Tab 是默认的分隔符,使用这一选项可以指定自己的分隔符。

-b : 提取指定的字节,也可以指定一个范围。

-c : 提取指定的字符,可以是以逗号分隔的数字的列表,也可以是以连字符分隔的数字的范围。

–complement : 补充选中的部分,即反选。

–output-delimiter : 修改输出时使用的分隔符。

--only-delimited : 不输出不包含分隔符的列。

我们以如下的名为 context.txt 的文本文件和 /etc/passwd 文件来为例来进行说明。

$ cat content.txt  
Ubuntu Linux 
Microsoft Windows 
OsX El Capitan 
Unix 
FreeBSD 

如何指定分隔符

最常用的选项是 -d 和 -f 的组合,这会根据 -d 指定的分隔符和 -f 列出的字段来提取内容。

例如在这个例子中只打印出 /etc/passwd 文件每一行的第一个字段,用的分隔符是 :

$ cut -d':' -f1 /etc/passwd 
root 
bin 
daemon 
adm 
lp 
sync 
shutdown 
halt 
mail 
operator 
games 
alvin 
liangxu 
... 

在下面这个例子中我们用空格作为分隔符打印 content.txt 文件的第一个字段

$ cut -d " " -f 1 content.txt  
Ubuntu 
Microsoft 
OsX 
Unix 
FreeBSD 

在下面这个例子中我们提取了多个字段。这里,我们使用冒号(:)分隔符从文件 /etc/passwd 中包含字符串 /bin/bash 的行提取第一和第六个字段。

$ grep "/bin/bash" /etc/passwd | cut -d':' -f1,6 
root:/root 
alvin:/home/alvin 

要显示字段的某个范围,可以指定开始和结束的字段,中间用连字符(-)连接,如下所示:

$ grep "/bin/bash" /etc/passwd | cut -d':' -f1-4,6,7 
root:x:0:0:/root:/bin/bash 
alvin:x:1000:1000:/home/alvin:/bin/bash 

如何补全选择的输出

要补全选择输出的字段(即反选),使用 --complement 选项。这一选项输出所有的字段,除了指定的字段。

在下面这个例子中输出 /etc/passwd 文件中包含 /bin/bash 的行中除了第二个字段以外的所有字段

$ grep "/bin/bash" /etc/passwd | cut -d':' --complement -f2 
root:0:0:root:/root:/bin/bash 

如何指定输出的分隔符

使用 --output-delimiter 可以指定输出的分隔符。输入的分隔符由 -d 来指定,而输出分隔符和输入分隔符默认是一样的。

我们先以下面的例子来测试不指定输出分隔符时的输出;

$  cut -d: -f1,7  /etc/passwd |  sort |  uniq -u 
_apt:/usr/sbin/nologin 
backup:/usr/sbin/nologin 
bin:/usr/sbin/nologin 
daemon:/usr/sbin/nologin 
dnsmasq:/usr/sbin/nologin 
games:/usr/sbin/nologin 
gnats:/usr/sbin/nologin 
irc:/usr/sbin/nologin 
landscape:/usr/sbin/nologin 
list:/usr/sbin/nologin 
lp:/usr/sbin/nologin 
lxd:/bin/false 

现在我们加上--output-delimiter选项,将输出分隔符指定为空格:

$  cut -d: -f1,7 --output-delimiter ' ' /etc/passwd |  sort |  uniq -u 
_apt /usr/sbin/nologin 
backup /usr/sbin/nologin 
bin /usr/sbin/nologin 
daemon /usr/sbin/nologin 
dnsmasq /usr/sbin/nologin 
games /usr/sbin/nologin 
gnats /usr/sbin/nologin 
irc /usr/sbin/nologin 
landscape /usr/sbin/nologin 
list /usr/sbin/nologin 
lp /usr/sbin/nologin 
lxd /bin/false 

我们再测试一个例子,用分隔符让每一行打印一个字段。

我们将 --output-delimiter 指定为 $'\n' 表换行。

输出结果为:

$ grep root /etc/passwd | cut -d':' -f1,6,7 --output-delimiter=$'\n' 
root 
/root 
/bin/bash 
operator 
/root 
/sbin/nologin 

如何以字符的方式提取内容

-c选项可以用来根据字符位置进行提取,注意空格和Tab也以字符来处理。

打印 context.txt 文件每一行的第一个字符,如下:

$ cut -c 1 content.txt 
U 
M 
O 
U 
F 

下面显示了 context.txt 文件每一行的第一至七个字符;

$ cut -c 1-7 content.txt 
Ubuntu 
Microso 
OsX El 
Unix 
FreeBSD 

我们再测试一下只指定开始或结束的位置。

下面提取第二个到最后一个字符:

$ cut -c2- content.txt 
buntu Linux 
icrosoft Windows 
sX El Capitan 
nix 
reeBSD 

提取第一到第四个字符:

cut -c-4 content.txt 
Ubun 
Micr 
OsX 
Unix 
Free 

如何根据字节提取

使用-b选项通过指定字节的位置来选择一行的某一部分,使用逗号分隔每个指定位置,或用连字符 - 指定一个范围。

下面这个例子提取 content.txt 文件每一行的第一,二,三个字节:

$ cut -b 1,2,3 content.txt  
Ubu 
Mic 
OsX 
Uni 
Fre 

我们也可以用如下命令列出一个范围;

$ cut -b 1-3,5-7 content.txt  
Ubutu  
Micoso 
OsXEl  
Uni 
FreBSD 

一些实用的例子

cut 是一个实用的命令,常常和其他Linux或Unix命令结合使用 。

例如如果你想提取 ps 命令中的 USER,PID和COMMAND:

ps -L u n | tr -s " " | cut -d " " -f 2,3,14- 
USER PID COMMAND 
0 676 /sbin/agetty -o -p -- \u --keep-baud 115200,38400,9600 ttyS0 vt220 
0 681 /sbin/agetty -o -p -- \u --noclear tty1 linux 
0 23174 -bash 
0 26737 ps -L u n 
0 26738 tr -s 
0 26739 cut -d -f 2,3,14- 

再测试一个例子,提取内存的 total,used和free值,并保存到一个文件中。

$ free -m | tr -s ' ' | sed '/^Mem/!d' | cut -d" " -f2-4 >> memory.txt 
$ cat memory.txt 
985 86 234 

总结

cut 命令可以和很多其他Linux或Unix命令通过管道连接。可以通过管道传递一个或多个过滤器进行额外的文本处理。

cut 命令的局限性之一是它不支持指定多个字符作为分隔符。多个空格会被计算为多个字段分隔符,因此必须在 cut 命令前使用 tr 命令才能获得需要的输出。


Recommend

  • 77

  • 69
    • www.jellythink.com 6 years ago
    • Cache

    Linux tcpdump命令详解

    前言 说到这个 tcpdump 命令,就不得不提自己参加的中国移动内蒙古分公司第三代CRM系统的开发与实施。如果没有记错的话,那应该是2016年,自己单独负责整个10086客服系统自助渠道的整体改造工作;在系统压测...

  • 25
    • www.cnblogs.com 4 years ago
    • Cache

    Linux下diff命令用法详解

    大家好,我是良许。 我们在平时工作的时候,经常要知道两个文件之间,以及同个文件不同版本之间有何异同点。在 Windows 下,有 beyond compare 这个好用的工具,而在 Linux 下,也有很多很强大的工具,良许之前也写过一篇文章介...

  • 4
    • zhang.ge 3 years ago
    • Cache

    Linux:awk命令详解

    Jager · 3月8日 · 2014年awk · linux 3229次已读简单使用: awk :对于文件中一行行的独处来...

  • 5
    • segmentfault.com 3 years ago
    • Cache

    linux的top命令参数详解

    linux的top命令参数详解发布于 今天 09:38 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。t...

  • 11
    • zhang.ge 3 years ago
    • Cache

    Linux:sed命令详解

    Linux:sed命令详解 | 张戈博客Jager · 3月6日 · 2014年linux · sed 2607次已读 sed是非交互式的编辑器。它不会修...

  • 12

    暂时没有写作灵感,就整理一些Linux基础知识好了,方便自己查阅,同时也是温故而知新嘛~! 在张戈博客,同样很有用的知识性博文还有以下几篇,也许你也会比较感兴趣: 详解Linux系统的CPU负载均...

  • 4
    • blogread.cn 3 years ago
    • Cache

    linux下搜索find命令详解

    linux下搜索find命令详解 浏览:7211次  出处信息 最近我们团队开展了一系列的15分钟linux培训计划,今天给大家分享了下find命令的...

  • 7
    • www.myfreax.com 2 years ago
    • Cache

    Linux cut命令详解与教程

    Linux和Unix系统中有许多实用的命令可用于处理和过滤文本文件。cut是一个命令行程序,允许您从指定文件或标准输入中剪切部分的行,并将结果写入到

  • 2

    Linux中cut和paste命令的用法详解 作者:Hank Zheng 2023-12-21 13:59:41 本文将详细介绍Linux命令行中的cut和paste命令,包括命令的基本用法、常见选项和实例演示。cut命令用于从文本中剪切字段,而paste命令则用...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK