-c 8- cut linux

2019-12-13 11:36:16 huawuque004 阅读数 372

uname -r  显示内核版本  -s  显示系统名

$ uname -rs

Linux 2.4.20-28.9.XFS1.3.1

sed 's/ //g'    删去所有空格

$uname -rs|sed 's/ //g'

Linux2.4.20-28.9.XFS1.3.1

cut -f1 -d'-' 以'-' 为分隔符,取第一个字段

$ uname -rs|sed 's/ //g'|cut -f1 -d'-'   (-f1切割开的第一块区域- f2第二块区域  -d'-'自定义分隔符为-。)

Linux2.4.20

[root@iz8vb84t8146h3n3x58qqgz /]# uname -r
3.10.0-1062.4.1.el7.x86_64
[root@iz8vb84t8146h3n3x58qqgz /]# uname -s
Linux
[root@iz8vb84t8146h3n3x58qqgz /]# uname -rs
Linux 3.10.0-1062.4.1.el7.x86_64
[root@iz8vb84t8146h3n3x58qqgz /]# uname -rs|sed 's/ //g'
Linux3.10.0-1062.4.1.el7.x86_64
[root@iz8vb84t8146h3n3x58qqgz /]# uname -rs|sed 's/ //g'|cut -f1 -d'-'
Linux3.10.0
[root@iz8vb84t8146h3n3x58qqgz /]# uname -rs|sed 's/ //g'|cut -f2 -d'-'
1062.4.1.el7.x86_64

 

我们也可以通过cut取得每行中特定的几个字符,但这时不能再跟 -d 选项

$uname -rs|sed 's/ //g'|cut -c1          //表示取第一个字符

L

$ uname -rs|sed 's/ //g'|cut -c1-      //表示从第一个字符到文件结束

Linux2.4.20-28.9.XFS1.3.1

$uname -rs|sed 's/ //g'|cut -c1-5      //表示从第一个字符到第五个字符

$uname -rs|sed 's/ //g'|cut -c-2        //表示从第一个字符到第二个字符

-c 和 -f 参数可以跟以下子参数:
N 第N个字符或字段
N- 从第一个字符或字段到文件结束
N-M 从第N个到第M个字符或字段
-M 从第一个到第N个字符或字段

2019-03-02 21:21:13 xiao__jia__jia 阅读数 1120

                          linux的cut

 

转载:https://blog.csdn.net/jb19900111/article/details/17756231

linux中截取字符串cut命令用法简介:
 

如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。

主要参数
-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符。
-f  :与-d一起使用,指定显示哪个区域。
-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的<br />范围之内,该字符将被写出;否则,该字符将被排除。

例子:

shell>> cat fileName
test2
this is a test content

-c 和 -f 参数可以跟以下子参数:
m 第m个字符或字段
m- 从第m个字符或字段到文件结束
-n 从第1个到第n个字符或字段
m-n 从第m个到第n个字符或字段

-c m-n 表示显示每一行的第m个字元到第n个字元。例如:

shell>> cut -c1-6 fileName ## print 每行 开头算起前 6 个字元
test2
this i

如果文件内容为:
liubi 23 140004

cut -c 1-5,10-14 fileName
liubi14000


-f m-n 表示显示第m栏到第n栏(使用tab分隔)。例如:

# cut -f 1,3 fileName
liubi 23 140004

如果遇到空格和制表符时,怎么分辨呢?
有时候制表符确实很难辨认,有一个方法可以看出一段空格到底是由若干个空格组成的还是由一个制表符组成的。
vim tab_space.txt

​​​​​​​this is tab finish.
this is several space      finish.

查看

[rocrocket@rocrocket programming]$ sed -n l tab_space.txt
this is tab\tfinish.$
this is several space      finish.$

如果是制表符(TAB),那么会显示为\t符号,如果是空格,就会原样显示。
通过此方法即可以判断制表符和空格了。
注意,上面sed -n后面的字符是L的小写字母哦,不要看错。
​​​​​​​

我们经常会遇到需要取出分字段的文件的某些特定字段,例如 /etc/password就是通过":"分隔各个字段的。可以通过cut命令来实现。例如,我们希望将系统账号名保存到特定的文件,就可以:
cut -d: -f 1 /etc/passwd > /tmp/users
-d用来定义分隔符,默认为tab键,-f表示需要取得哪个字段
如:
使用|分隔
cut -d’|’ -f2 1.test>2.test
使用:分隔
cut -d’:’ -f2 1.test>2.test

2016-08-12 20:45:40 u011003120 阅读数 38428

一、作用

cut命令是一个选取命令,其功能是将文件中的每一行”字节” ”字符” ”字段” 进行剪切,选取我们需要的,并将这些选取好的数据输出至标准输出

二、格式

cut -[n]b file
cut -c file
cut -d[分隔符] -f[域] file

三、参数解释

-b(bytes) :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c(characters) :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符。
-f(filed) :与-d一起使用,指定显示哪个区域。
-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的
范围之内,该字符将被写出;否则,该字符将被排除。

四、实例分析

新建一个test1.txt,如下

557adfhg
bcd5464b
135465453456
233546576
[root@localhost shell]# 

新建一个test2.txt,如下

[root@localhost shell]# cat test2.txt 
星期一
星期二
星期三
星期四
星期五
星期六
星期日
[root@localhost shell]# 

1) -b

1.剪切单个字节

如下,只剪切txt中的每一行的第一个字节

[root@localhost shell]# cut -b 1 test1.txt 
5
b
1
2
[root@localhost shell]# 

2.剪切多个字节

剪切多个字符有很多方式,
如 -b 1,3,5 //剪切每一行第 1 3 5个字符 (示例1)
如 -b 1-5 //剪切每一行第 1-5 个字符 (示例2)
如 -b -5 //剪切每一行第 1-5 个字符 (示例3)
如 -b 3- //剪切每一行第 3个字符以后的 (示例4)

示例1:

[root@localhost shell]# cut -b 1,3,5 test1.txt 
57d
bd4
156
234
[root@localhost shell]# 

示例2:

[root@localhost shell]# cut -b 1-5 test1.txt 
557ad
bcd54
13546
23354
[root@localhost shell]# 

示例3:

[root@localhost shell]# cut -b -5 test1.txt 
557ad
bcd54
13546
23354
[root@localhost shell]# 

示例4:

[root@localhost shell]# cut -b 3- test1.txt 
7adfhg
d5464b
5465453456
3546576
[root@localhost shell]# 

3.剪切字符

首先按照上面的例子对test2.txt进行操作,看有什么现象

[root@localhost shell]# cut -b 2 test2.txt 
�
�
�
�
�
�
�
[root@localhost shell]# 

出现了乱码的现象,因为-b 只是针对字节进行裁剪,对一个汉字进行字节裁剪,得到的结果必然是乱码,若想使用 -b 命令对字节进行裁剪,那么则需要使用 -n 选项,此选项的作用是取消分割多字节字符。

[root@localhost shell]# cut -nb 3 test2.txt 

星
星
星
星
星
星
[root@localhost shell]# cut -nb 3,6  test2.txt 
星
星期
星期
星期
星期
星期
星期
[root@localhost shell]# cut -nb 3,6,9  test2.txt 
星期
星期二
星期三
星期四
星期五
星期六
星期日
[root@localhost shell]# cut -nb 3,6,9,12  test2.txt 
星期一
星期二
星期三
星期四
星期五
星期六
星期日
[root@localhost shell]# 

2) -c

-c的作用就是剪切字符,和上面的 -nb 有些类似

[root@localhost shell]# cut -c 1 test2.txt 

星
星
星
星
星
星
[root@localhost shell]# cut -c 2 test2.txt 
星
期
期
期
期
期
期
[root@localhost shell]# cut -c 1-3 test2.txt 
星期
星期二
星期三
星期四
星期五
星期六
星期日
[root@localhost shell]# 

3)-f

上面的-b -c 只是针对于格式固定的数据中剪切,但是对于一些格式不固定的,就没有办法获取到我们想要的数据,因此便有了 -f 域的概念。

示例1:

[root@localhost shell]# cat /etc/passwd | head -n 3
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@localhost shell]# 

例如将上面的第一个 : 前面的字符给剪切出来,那么我们就可以使用 -d 命令,指定其分割符为 : 然后再选取第一个域内的内容即可,如下

[root@localhost shell]# cat /etc/passwd | head -n 3 | cut -d : -f 1
root
bin
daemon
[root@localhost shell]# 

示例2:
剪切ip地址,如下:

[root@localhost shell]# ifconfig eth0 | grep "inet addr"
          inet addr:192.168.1.199  Bcast:192.168.1.255  Mask:255.255.255.0
[root@localhost shell]# ifconfig eth0 | grep "inet addr" | cut -d : -f 2
192.168.1.199  Bcast        //以 : 为分隔符,选取第二个域里面的内容,输出
[root@localhost shell]# ifconfig eth0 | grep "inet addr" | cut -d : -f 2 | cut -d ' ' -f 1 
192.168.1.199             //以空格为分割符,选取第一个域内的内容,输出
[root@localhost shell]# 

菜鸟一枚,如有错误,多多指教。。。

2019-03-13 09:44:57 weixin_44371151 阅读数 2182

cut 命令从文件的每一行剪切内容并将其写至标准输出。

参数:

 -b :以字节(bytes)为单位进行分割。

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

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

 -f :与-d一起使用,按d指定的分隔符分割后,指定显示哪个区域(fields)

 -n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的
范围之内,该字符将被写出;否则,该字符将被排除。

–complement :补充选定的内容,即反选。

参数说明: 必须指定分割单位,即参数b、c、f 必须三选一

举个例子 

]# cat test.txt
No Name Mark Percent
01 tom 69 91
02 jack 71 87
03 alex 68 98

使用 -f 选项提取指定字段:

]# cut -f2,3 test.txt 
Name Mark
tom 69
jack 71
alex 68

 --complement 选项提取指定字段之外的列(打印除了第二列之外的列):

]# cut -f2 --complement test.txt 
No Mark Percent
01 69 91
02 71 87
03 68 98

使用 -d 选项指定字段分隔符:

]# cat test2.txt 
No;Name;Mark;Percent
01;tom;69;91
02;jack;71;87
03;alex;68;98
]# cut -f2 -d";" test2.txt 
Name
tom
jack
alex

指定字段的字符或者字节范围:

N-:从第N个字节、字符、字段到结尾;

N-M:从第N个字节、字符、字段到第M个(包括M在内)字节、字符、字段;

-M:从第1个字节、字符、字段到第M个(包括M在内)字节、字符、字段。

]# cat test3.txt 
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz

打印前2个字符:

]# cut -c-2 test3.txt 
ab
ab
ab
ab
ab

打印从第5个字符开始到结尾:

]# cut -c5- test3.txt 
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz

参数-b-c的区别:

]$ cat test4.txt
星期一
星期二
星期三
星期四

]$ cut -b 3 test4.txt



]$ cut -c 3 test4.txt



注意:cut只允许间隔符是一个字符

2013-06-01 11:10:25 zhangmingxingwei 阅读数 1588
1. cut命令用法如下:  (转)

cut -b list [-n] [file ...]

cut -c list [file ...]

cut -f list [-d delim][-s][file ...]


 

     上面的-b、-c、-f分别表示字节、字符、字段(即byte、character、field);

     list表示-b、-c、-f操作范围,-n常常表示具体数字;

     file表示的自然是要操作的文本文件的名称;

     delim(英文全写:delimiter)表示分隔符,默认情况下为TAB;

     -s表示不包括那些不含分隔符的行(这样有利于去掉注释和标题)


上面三种方式中,表示从指定的范围中提取字节(-b)、或字符(-c)、或字段(-f)。


范围的表示方法:

 

N

只有第N项

N-

从第N项一直到行尾

N-M

从第N项到第M项(包括M)

-M

从一行的开始到第M项(包括M)

-

从一行的开始到结束的所有项



 

下面是实例,先以较简单的“命令用法”中提及的第二条开始讲起:

 

 

interrupts文件中的字符排列非常齐整,正适合我们切豆腐。

 

 

 

但这里我们只对两个数字列感兴趣,用法如下:

 

 

 

 

里面还有一些不需要的内容,精减一下:

关于正则表达式的使用,请自行查阅相关资料。

 

 

 

 

合到一起:

cut -c1-15  从第1列到15列

哇,果然够帅!!

 

 

不相邻列的截选又应该如何做呢?

cut -c1-4,34-    从1-4, 34到结束

 

这种方式需要事先确定占多少个字符位置,不仅麻烦,而且容易出错。

 

 

下面的问题该怎么去做?

 

 

 

 

这就是第二讲:使用cut –f提取文本中的字段。

 

cut –c主要是用来在固定字符位置或个数的文本文件中提取,对于上面的例子就显得无能为力了。仔细观察,发现passwd文件有个规律,就是以冒号来区分不同的段的文本,于是。。。


cut -f1 -d':' 

 

 

怎么样,好玩吧~!

 

 

继续,创建一个文本文件,名为a.txt,名字有点土,凑合着用吧。

 

A1、B1、C1所代表的行字符之间均以TAB分隔,D1却是以空格来分开的。

 

 

 

 

 

看到-s的作用了吗?(因为第一行不含有任何TAB字符,所以直接被剔除了),而最后一行(即D1行),是以空格区分间距,所以也不合要求。

 

 

 

 

多了个参数,这个我没讲,只要你的智商比范伟高一点点,就肯定能猜出来啦。^_^

 

 

 

好了,下面是最后一个用法的讲解了:

 

 

 

因为虚拟终端下无法显示汉字,所以我只好回到图形下,截图就成这个白不垃圾的样子啦,忍忍吧,就快讲完了。

  

在这个文件中,每个汉字都是用半角空格分隔的。

 

 

 

 

 

 

用cut –c已经成功了,下面试试cut –b怎么样?

没有反应,why?

 

   

原因在于汉字本身是双字节的,cut –c把汉字“我”当成一个字符来处理,而cut –b是以字节来处理,把“我”拆成了两个字节,结果是字符被“切成两半”,因此无法正常显示。

 

 

原因找到了,要怎么办才好呢?

 

 

 

耶!!!搞定。

 

linux cut 命令详解

阅读数 5595

linux cut 例子

阅读数 562

cut

阅读数 142