linux命令取字符串行的第一行,Linux字符截取命令-cut

Linux字符截取命令-cut

1460000039906181

做者 | WenasWeihtml

一 Linux之cut命令详解

将每一个文件中选定的行部分打印到标准输出, 若是没有文件,或者文件是-,则读取标准输入,长选项的强制参数对于短选项也是强制的。node

cut 是一个选取命令,通常来讲,选取信息一般是针对“行”来进行分析的,并非整篇信息分析的,用于显示每行从开头算起 num1 到 num2 的文字。linux

1.1 使用语法

cut [-bn] [file]

cut [-c] [file]

cut [-df] [file]

1.2 使用说明

cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。ubuntu

若是不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一, cut 默认以制表符为分隔符。bash

参数:服务器

-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。

-c :以字符为单位进行分割。

-d :自定义分隔符,默认为制表符。

-f :与-d一块儿使用,指定显示哪一个区域。

-n :取消分割多字节字符。仅和 -b 标志一块儿使用。若是字符的最后一个字节落在由 -b 标志的 List 参数指示的范围以内,该字符将被写出;不然,该字符将被排除

在 -b、-c 或 -f 中只能使用一个。每一个LIST由一个组成

范围,或用逗号分隔的多个范围。选定的输入被写入

顺序与读取和写入的顺序相同。app

1.3 三个方法定位

cut 命令主要是接受三个定位方法:测试

第一,字节(bytes),用选项 -b

第二,字符(characters),用选项 -c

第三,域(fields),用选项 -f

二 cut 帮助文档

执行命令查询帮助文档:ui

cut --help

1460000039906182

cut帮助文档解析:spa

(1)'-b字节列表'

'--bytes =字节列表'

选择仅打印字节列表中列出的位置中的 字节。制表符和退格键与其余任何字符同样;他们占用了1个字节。若是指定了输出定界符,而后在所选字节范围之间输出该字符串。

(2)'-c字符列表'

'--characters =字符列表'

选择仅打印在 character-list 中列出的位置中的 字符。目前与 -b 相同,可是国际化将改变这种情况。制表符和退格键与其余任何字符同样;他们占1个字符。若是指定了输出定界符,而后在所选字节范围之间输出该字符串。

(3)'-d input_delim_byte'

'--delimiter = input_delim_byte'

和 -F,请使用 input_delim_byte 的第一个字节做为输入字段分隔符(默认为TAB)。

(4)'-f字段列表'

'--fields =字段列表'

选择仅打印在 field-list 中列出的字段。默认状况下,字段之间用TAB字符分隔。还要打印任何不包含定界符的行,除非 -仅定界 (-s)选项已指定。

(5)'-n'

不要拆分多字节字符。

(6)'-s'

'-仅定界'

为了 -F,请勿打印不包含字段分隔符的行。一般,任何没有字段分隔符的行都按原样打印。

三 命令详解与使用案例

3.1 实例一: 查询命令结合 cut -b

当你执行 who 命令时,会输出相似以下的内容:

$ who

root pts/1 2021-04-25 21:51 (58.62.93.183)

root pts/0 2021-04-25 21:50 (58.62.93.183)

(1) 提取每一行的第3个字节

$ who|cut -b 3

o

o

(2) 提取第1,第二、第3个字节

方案1:

$ who |cut -b 1-3

roo

roo

roo

方案2:

$ who |cut -b 1,2,3

roo

roo

roo

-b 支持形如 1-3 的写法,并且多个定位之间用逗号隔开就能够了。

注意:

cut 命令若是使用了-b选项,那么执行此命令时,cut 会先把 -b 后面全部的定位进行从小到大排序,而后再提取。不能颠倒定位的顺序。

(3) 提取第1到第3,第5和第20个字符以后的全部数据

who|cut -b 1-3,20-

roo 2021-04-25 21:51 (58.62.93.183)

roo 2021-04-25 21:50 (58.62.93.183)

roo 2021-04-25 23:05 (58.62.93.183)

(4) 提取第n个字节先后全部的字节

n = 2 的状况下

方案1:

$ who |cut -b 2-

oot pts/1 2021-04-25 21:51 (58.62.93.183)

oot pts/0 2021-04-25 21:50 (58.62.93.183)

oot pts/2 2021-04-25 23:05 (58.62.93.183)

方案2:

$ who |cut -b -2

ro

ro

ro

3.2 实例二: 文本文件结合 cut -c

(1)建立测试文件

建立一份测试文件: test.txtvi test.txt

测试文件内容数据apple=苹果=pingguo

create=建立

delect=删除

exe=程序

good=好的

(2) -c 和 -b 的使用区别

-c与命令查询结果:

who|cut -c 1-3,20-

roo 2021-04-25 21:51 (58.62.93.183)

roo 2021-04-25 21:50 (58.62.93.183)

roo 2021-04-25 23:05 (58.62.93.183)

看似查询结果相同,只是由于这个例子 who 输出取的数据都是字节字符,因此用 -b 和 -c 没有区别,若是你提取中文,区别就看出来了,看看中文提取的状况:

$ cut -b 3-10 test.txt

ple=苹

eate=创

lect=删

e=程序

od=好

$ cut -c 3-10 test.txt

ple=苹

eate=创

lect=删

e=程序

od=好

结果发现,这个问题不知道哪一个版本已经修复了,附加上测试使用的 linux 版本,其余命令与 -b使用相似,下面将再也不一一列举。$ cat /proc/version

Linux version 4.15.0-52-generic (buildd@lgw01-amd64-051) (gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3)) #56-Ubuntu SMP Tue Jun 4 22:49:08 UTC 2019

3.3 实例三: cut -d 与 -f 的共同使用

cut 的 -d 选项的默认间隔符就是制表符,因此当你就是要使用制表符的时候,彻底就能够省略 -d 选项,而直接用-f来取域就能够了。

(1) 结合查询命令取出指定符号的切割的第一域

$ head -n 5 /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

sys:x:3:3:sys:/dev:/usr/sbin/nologin

sync:x:4:65534:sync:/bin:/bin/sync

$ head -n 5 /etc/passwd |cut -d ':' -f 1

root

daemon

bin

sys

sync

(2) 取出文档中指定符号的切割的第一域

$ head -n 5 test.txt |cut -d : -f 1

apple=苹果=pingguo

create=建立

delect=删除

exe=程序

good=好的

$ head -n 5 test.txt |cut -d = -f 2

苹果

建立

删除

程序

好的

(3)如上 -b 中的拼接规则同理使用

$ head -n 5 test.txt |cut -d = -f2-

$ head -n 5 test.txt |cut -d = -f2,3

$ head -n 5 test.txt |cut -d = -f2-3

(4)分隔符必须为单个字符,多个异常以下

$ cat test.txt |cut -d '==' -f2-3

cut: the delimiter must be a single character

四 使用场景和缺陷不足

4.1 cut的使用场景

cut命令用来显示行中的指定部分,删除文件中指定字段

脚本切割读取文件或者指定命令信息

统计指定的服务器信息处理,进行概括统计

4.2 cut的缺陷和不足

不能处理多空格

若是文件里面的某些域是由若干个空格来间隔的,那么用cut就有点麻烦了,由于 cut 只擅长处理“以一个字符间隔”的文本内容

4.3 cut和awk的差异

当一个文件中每一行都含有一个或多个空格时,这时候只能用 awk 来分隔

cut默认的分隔符是制表符,awk默认的分隔符是一个空格或者多个空格或者是制表符

语法格式不一样

参考文档:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值