你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

Linux和Unix系统中的cut命令

[复制链接]
gaosmile 发布时间:2020-4-20 09:20
cut命令用于Linux和Unix系统中,从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
在本教程中,我们将通过一些实用示例来学习Linux cut命令,你可以在日常命令行活动中使用这些示例。
Cut命令和语法

cut命令基本语法如下:

  1. cut OPTION... [FILE]...
复制代码

让我们看一下这个选项,没有哪个选项此命令不起作用。
剪切选项:
-f:通过指定字段进行提取。cut命令使用“ TAB”作为默认字段分隔符。
-d:'Tab'是默认的分隔符,使用此选项可以使用特定的分隔符。
-b:通过指定一个字节来提取。也可以指定字节范围。
-c:按字符分割。这可以是用逗号分隔的数字列表,也可以是用连字符(-)分隔的数字范围。–complement:用来补充选择
–output-delimiter:要更改输出分隔符,请使用选项-output-delimiter ='delimiter'。
--only-delimited:Cut将不会输出不包含分隔符的行
在本教程中,我们将使用以下名为“ content.txt”的文本文件和/ etc / passwd文件来说明我们的示例。

  1. $ cat content.txt
  2. Ubuntu Linux
  3. Microsoft Windows
  4. OsX El Capitan
  5. Unix
  6. FreeBSD
复制代码


如何用分隔符剪切


最常用的cut选项是-d和-f的组合,它基本上会根据特定的分隔符和列出的字段提取内容。
例如,以下仅使用分隔符(输出'/ etc / passwd'文件中每行的第一字段。

  1. $ cut -d':' -f1 /etc/passwd
  2. root
  3. bin
  4. daemon
  5. adm
  6. lp
  7. sync
  8. shutdown
  9. halt
  10. mail
  11. operator
  12. games
  13. ...
复制代码

在下面的示例中,我们使用空格(“”)作为分隔符,并从名为'content.txt'的文件中删除了第一个字段。

  1. $ cut -d " " -f 1 content.txt
  2. Ubuntu
  3. Microsoft
  4. OsX
  5. Unix
  6. FreeBSD
复制代码

本示例从特定文件中提取多个字段。在这里,我们使用冒号(分隔符从文件“ / etc / passwd”中提取第一和第六字段,文件中包含字符串“ / bin / bash”:

  1. $ grep "/bin/bash" /etc/passwd | cut -d':' -f1,6
  2. root:/root
  3. slax:/home/slax
复制代码

要显示字段范围,请指定以hypen(-)分隔的开始字段和结束字段,如下所示:

  1. $ grep "/bin/bash" /etc/passwd | cut -d':' -f1-4,6,7
  2. root:x:0:0:/root:/bin/bash
  3. slax:x:1000:1000:/home/slax:/bin/bash
复制代码


如何补充输出选择


要补充选择字段列表,请使用--complement选项。此选项用于在何处选择除指定字段以外的所有字段。
在下面的示例命令中,将输出'/ etc / passwd'文件中第二个字段以外的所有字段:

  1. $ grep "/bin/bash" /etc/passwd | cut -d':' --complement -f2
  2. root:0:0:root:/root:/bin/bash
复制代码

如何指定输出分隔符
要指定输出分隔符,请使用--output-delimiter选项。输入分隔符由-d选项指定,默认情况下,输出分隔符与输入分隔符相同。
让我们首先看下输出不使用输出分隔符的情况,如下所示:

  1. $  cut -d: -f1,7  /etc/passwd |  sort |  uniq -u
  2. _apt:/usr/sbin/nologin
  3. backup:/usr/sbin/nologin
  4. bin:/usr/sbin/nologin
  5. daemon:/usr/sbin/nologin
  6. dnsmasq:/usr/sbin/nologin
  7. games:/usr/sbin/nologin
  8. gnats:/usr/sbin/nologin
  9. irc:/usr/sbin/nologin
  10. landscape:/usr/sbin/nologin
  11. list:/usr/sbin/nologin
  12. lp:/usr/sbin/nologin
  13. lxd:/bin/false
复制代码

现在,我添加了--output-delimiter选项,并将输入分隔符冒号(替换为输出分隔符“ SPACE”,如下所示:

  1. $  cut -d: -f1,7 --output-delimiter ' ' /etc/passwd |  sort |  uniq -u
  2. _apt /usr/sbin/nologin
  3. backup /usr/sbin/nologin
  4. bin /usr/sbin/nologin
  5. daemon /usr/sbin/nologin
  6. dnsmasq /usr/sbin/nologin
  7. games /usr/sbin/nologin
  8. gnats /usr/sbin/nologin
  9. irc /usr/sbin/nologin
  10. landscape /usr/sbin/nologin
  11. list /usr/sbin/nologin
  12. lp /usr/sbin/nologin
  13. lxd /bin/false
复制代码

让我们看下另一个示例,这里我们使用输出分隔符输出在新行的每个字段上。
在这里,我们将--output-delimiter用作$’\ n’,表示新行。
输出如下:

  1. $ grep root /etc/passwd | cut -d':' -f1,6,7 --output-delimiter=
  2. [/font][/backcolor][/color][/align][align=left][color=#001000][backcolor=rgb(255, 255, 255)]
  3. [/backcolor][/color][/align][font=Tahoma][b]如何按字符剪切[/b][/font][font=Tahoma]
  4. [/font]
  5. [align=left][color=#001000][backcolor=rgb(255, 255, 255)]
  6. [/backcolor][/color][/align][align=left][color=#001000][backcolor=rgb(255, 255, 255)][font=Tahoma]用于按字符位置剪切。请记住,“ TABS”和“空格”也被视为字符。[/font]
  7. [/backcolor][/color][/align][align=left][color=#001000][backcolor=rgb(255, 255, 255)][font=Tahoma]要从名为content.txt的文件的每一行输出第一个字符,请使用以下命令:[/font][/backcolor][/color][/align][align=left][color=#001000][backcolor=rgb(255, 255, 255)][font=Tahoma][code]
  8. $ cut -c 1 content.txt
  9. U
  10. M
  11. O
  12. U
  13. F
复制代码

在下面的示例中,我们将显示文件中每行的字符1至7(范围):

  1. $ cut -c 1-7 content.txt
  2. Ubuntu
  3. Microso
  4. OsX El
  5. Unix
  6. FreeBSD
复制代码

让我们看看如何通过特定的开始或结束位置来选择列。
要将列从第二个字符提取到最后一个字符:

  1. $ cut -c2- content.txt
  2. buntu Linux
  3. icrosoft Windows
  4. sX El Capitan
  5. nix
  6. reeBSD
复制代码

要从第一个字符到第四个字符提取列:

  1. cut -c-4 content.txt
  2. Ubun
  3. Micr
  4. OsX
  5. Unix
  6. Free
复制代码

如何按照字节剪切


使用-b选项通过用逗号(,)分隔的数字指定字节位置来选择一行中的一部分。使用连字符可以指定字节范围。
以下示例从名为“ content.txt”的文件的第1、2和3个字节切出:

  1. $ cut -b 1,2,3 content.txt
  2. Ubu
  3. Mic
  4. OsX
  5. Uni
  6. Fre
复制代码

我们还可以使用以下命令列出范围:

  1. $ cut -b 1-3,5-7 content.txt
  2. Ubutu
  3. Micoso
  4. OsXEl
  5. Uni
  6. FreBSD
复制代码


一些实用的示例


Cut是结合不同的Linux或Unix命令最实用的方法。
例如,您要使用ps命令提取“ USER”,“ PID”和“ COMMAND”如下:

  1. ps -L u n | tr -s " " | cut -d " " -f 2,3,14-
  2. USER PID COMMAND
  3. 0 676 /sbin/agetty -o -p -- \u --keep-baud 115200,38400,9600 ttyS0 vt220
  4. 0 681 /sbin/agetty -o -p -- \u --noclear tty1 linux
  5. 0 23174 -bash
  6. 0 26737 ps -L u n
  7. 0 26738 tr -s
  8. 0 26739 cut -d -f 2,3,14-
复制代码

让我们再举一个例子来提取内存的“ total”、“ used”和“ free”值,并使用多个命令将其保存到文本文件中:

  1. $ free -m | tr -s ' ' | sed '/^Mem/!d' | cut -d" " -f2-4 >> memory.txt
  2. Output
  3. $ cat memory.txt
  4. 985 86 234
复制代码


结论


cut命令可以与许多其他Linux或Unix命令一起传递。可以通过管道传递一个或多个过滤器以进行其他文本处理。
cut命令的局限性之一是它不支持指定多个字符作为分隔符。多个空格会被计为多个字段分隔符,必须在剪切前使用tr命令才能获得所需的输出。

\n'
root
/root
/bin/bash
operator
/root
/sbin/nologin[/code]

如何按字符剪切


用于按字符位置剪切。请记住,“ TABS”和“空格”也被视为字符。
要从名为content.txt的文件的每一行输出第一个字符,请使用以下命令:

  1. $ cut -c 1 content.txt
  2. U
  3. M
  4. O
  5. U
  6. F
复制代码

在下面的示例中,我们将显示文件中每行的字符1至7(范围):

  1. $ cut -c 1-7 content.txt
  2. Ubuntu
  3. Microso
  4. OsX El
  5. Unix
  6. FreeBSD
复制代码

让我们看看如何通过特定的开始或结束位置来选择列。
要将列从第二个字符提取到最后一个字符:

  1. $ cut -c2- content.txt
  2. buntu Linux
  3. icrosoft Windows
  4. sX El Capitan
  5. nix
  6. reeBSD
复制代码

要从第一个字符到第四个字符提取列:

  1. cut -c-4 content.txt
  2. Ubun
  3. Micr
  4. OsX
  5. Unix
  6. Free
复制代码

如何按照字节剪切


使用-b选项通过用逗号(,)分隔的数字指定字节位置来选择一行中的一部分。使用连字符可以指定字节范围。
以下示例从名为“ content.txt”的文件的第1、2和3个字节切出:

  1. $ cut -b 1,2,3 content.txt
  2. Ubu
  3. Mic
  4. OsX
  5. Uni
  6. Fre
复制代码

我们还可以使用以下命令列出范围:

  1. $ cut -b 1-3,5-7 content.txt
  2. Ubutu
  3. Micoso
  4. OsXEl
  5. Uni
  6. FreBSD
复制代码


一些实用的示例


Cut是结合不同的Linux或Unix命令最实用的方法。
例如,您要使用ps命令提取“ USER”,“ PID”和“ COMMAND”如下:

  1. ps -L u n | tr -s " " | cut -d " " -f 2,3,14-
  2. USER PID COMMAND
  3. 0 676 /sbin/agetty -o -p -- \u --keep-baud 115200,38400,9600 ttyS0 vt220
  4. 0 681 /sbin/agetty -o -p -- \u --noclear tty1 linux
  5. 0 23174 -bash
  6. 0 26737 ps -L u n
  7. 0 26738 tr -s
  8. 0 26739 cut -d -f 2,3,14-
复制代码

让我们再举一个例子来提取内存的“ total”、“ used”和“ free”值,并使用多个命令将其保存到文本文件中:

  1. $ free -m | tr -s ' ' | sed '/^Mem/!d' | cut -d" " -f2-4 >> memory.txt
  2. Output
  3. $ cat memory.txt
  4. 985 86 234
复制代码


结论


cut命令可以与许多其他Linux或Unix命令一起传递。可以通过管道传递一个或多个过滤器以进行其他文本处理。
cut命令的局限性之一是它不支持指定多个字符作为分隔符。多个空格会被计为多个字段分隔符,必须在剪切前使用tr命令才能获得所需的输出。

收藏 评论1 发布时间:2020-4-20 09:20

举报

1个回答
xiesir 回答时间:2020-4-20 09:35:27
感觉linux很难

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版