linux文件操作之cut命令

一、cut命令

1,cut命令是对行来截取的命令。先来看man中cut命令参数

      -b, --bytes=LIST
              select only these bytes
      -c, --characters=LIST
              select only these characters
      -d, --delimiter=DELIM
              use DELIM instead of TAB forfield delimiter
      -f, --fields=LIST
              select only these fields;  also print any line that contains nodelimiter character, unless the -s option is specified
      -n     with -b: don’t splitmultibyte characters
      --complement
              complement the set of selectedbytes, characters or fields
      -s, --only-delimited
              do not print lines not containingdelimiters
      --output-delimiter=STRING
              use STRING as the output delimiterthe default is to use the input delimiter

2,参数解释

-b:以字节为单位来分割。这些字节忽略多字节边界,除非指定-n。何为多字节?比如说中

文字符,一个中文占两个字节(编码不同,可能为2-4个字节)。

-n:仅跟-b一起使用,表示取消分割多字节符。

例:

[[email protected] test2]# more test.txt
abc
123
ijk
mnq
[[email protected] test2]# cut -b 1 test.txt
a
1
i
m
[[email protected] test2]# more test2.txt #我这是ut-f8编码,一个中文占3个字节
123456789
中文字符
一二三
 
#不加-n参数表示只打印第6个字节,所以中文无法打印
[[email protected] test2]# cut -b 6 test2.txt
6
#取消分割,只要第6个自己包含在即打印
[[email protected] test2]# cut -nb 6 test2.txt
6
文
二
[[email protected] test2]# cut -nb 4 test2.txt#第4个字节未完全包含单个字符,故没有打印中文
4

-c:以字符位为单位进行分割。当一个字符占一个字节时与-b效果相同,但对于多字节字符就不同。

例:

[[email protected] test2]# cut -b 3 test.txt
c
3
k
q
[[email protected] test2]# cut -c 3 test.txt
c
3
k
q
[[email protected] test2]# cut -b 3 test2.txt
3
 
[[email protected] test2]# cut -c 3 test2.txt
3
字
三

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

-f:即fields(域),因为-f以分割符来分割的,故一般与-d一起使用。因为-f可以指定以指定

的字符进行分割,使用比较灵活,故-f与-d是常用参数。

如passw文件以“:”冒号分隔每个字段。
[[email protected] test2]# cat/etc/passwd|head -n 5
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
#只将以“:”分隔后的第5列打印出来
[[email protected] test2]# cat/etc/passwd|head -n 5 |cut -d : -f 5
root
bin
daemon
adm
lp

-s:表示打印没有分割符的行。假设某文件行以“-”分割,若某行没有“-”符号则不打印

[[email protected] test2]# more test6.txt
1-2-3-4
a,b,c,d
e-f-g-h
h:i:j:k
i-ii-iii-iv-v
[[email protected] test2]# cut -d ‘-‘ -f 1-test6.txt
1-2-3-4
a,b,c,d
e-f-g-h
h:i:j:k
i-ii-iii-iv-v
[[email protected] test2]# cut -d ‘-‘ -f  1-  -stest6.txt
1-2-3-4
e-f-g-h
i-ii-iii-iv-v

可以看到-f根据指定字符分割后分成一个一个域,然后可以选择需要的域。

之前我们例子都是选择分割后的一个字节、字符或域,其实cut还支持同时打印多字符,以几个例子来了解,很简单不做多解释。

[[email protected] test2]# cat test.txt
abc
123
ijk
mnq
[[email protected] test2]# cat test2.txt
123456789
中文字符
一二三
[[email protected] test2]# cut -b 1,3 test.txt#第1和第3域
ac
13
ik
mq
#第1至第3域,还可以-2表示1-2,2-表示第2域到最后。注意分割后从1开始的。
[[email protected] test2]# cut -c 1-3test2.txt
123
中文字
一二三
[[email protected] test2]# ll |cut -d ‘ ‘ -f1,10|sed ‘1d‘ #只查看权限效果
-rw-r--r--. test2.txt
-rw-r--r--. test3.txt
-rw-r--r--. test.txt

刚才我们说了-d选项默认是以制表符来分割的,但有些文件即有制表符符又有空格会怎么样?

[[email protected] test2]# more test3.txt
id     姓名    年龄
001    张三    18
002    李四    19
003    王五    20
[[email protected] test2]# cut -d ‘ ‘ -f 2-3test3.txt
id     姓名    年龄
001    张三    18
 
 
[[email protected] test2]# cut -f 2-3test3.txt
姓名    年龄
张三    18
002    李四    19
王五    20

我们发现两次效果均不是想要的结果,其实我想要结果是显示姓名和年龄。我们来看看文件真正存储形式就知道为什么是这样的结果了。

[[email protected] test2]# sed -n l test3.txt
id\t\345\247\223\345\220\215\t\345\271\264\351\276\204$
001\t\345\274\240\344\270\211\t18$
002    \346\235\216\345\233\233    19$
003\t\347\216\213\344\272\224    20$

可以看到第一行、第二行是通过制表符(\t)来链接的,而第三行是通过空格来隔开的,第四行即有制表符又有空格。

第一种情况,以空格分割,第一、二行没有空格所以根本就没分割。第三行分割成很多块,打印2-3块,即依然还是空格。第四行也是一样,注意中间有多个空格。

第二种情况,以制表符分割,第一、二行能够按预期打印,第三行没有制表符即没有分割所以打印全部,第四行分割成2块,所以打印2-3块的话就打印后面的全部。

对空格分割处理:

[[email protected]]# more test5.txt
1 3
1  4
1   5
1    6
[[email protected]]# cut -d ‘ ‘ -f 2 test5.txt
3
 
 
 
[[email protected] test2]#cut -d ‘ ‘ -f 3 test5.txt
 
4
 
 
[[email protected]]# cut -d ‘ ‘ -f 4 test5.txt
 
 
5
 
[[email protected]]# cut -d ‘ ‘ -f 5 test5.txt
 
 
 
6

可以这么理解每个分割符就是假设有个斜杠,但是并不打印出来,斜杠之间可能为空。

这个想象中的“斜杠”也可以打印出来,还可以自定义以某个字符串来代替。使用--output-delimiter=STRING来实现。

[[email protected]]# cut -d ‘-‘ -f 1- -s test6.txt --output-delimiter=‘$‘
1$2$3$4
e$f$g$h
i$ii$iii$iv$v

即将原有的分割符替换为新的分割符。

我们也看到cut对空格处理不是那么理想化,参数较少,记住就行。

时间: 2024-08-28 01:35:57

linux文件操作之cut命令的相关文章

linux文件操作之rm命令

一.rm参数常用的参数比较少,还是先来看看各个参数意思. -i       :表示删除之前都会询问是否确认删除.当你递归删除一个目录时你会发现很麻烦, 所以平时用得比较少. -f       :默认情况rm命令通过别名的方式为rm–i即使用rm命令时会提示确认删除, 使用-f就可以强制删除,而无需再次确认. -r      :当你使用rm删除一个目录会发现"rm:cannot remove `test': Is a directory",这是因为 rm命令不能直接删除目录,需要通过-r

linux文件操作

1.linux文件操作 cat test.txt | head -n 100 查看开始100行 cat finalout.txt | head -n 100 | cut -d , -f 2   安装,分割各行,取第2个位置的数据 cat test.txt |sed 's/""//g' 查看下效果 cat finalout.txt | head -n 10 | cut -d , -f 2 按,切割 cat part_name_tmp.txt | cut -d \" -f 2 &

linux文件目录操作的相关命令

linux文件目录操作的相关命令 mkdir rmdir tree touch stat cp mv rm mkdir 功能说明:建立空目录 语 法:mkdir [-p][--help][--v][-m <目录属性>][目录名称] 补充说明:mkdir可建立目录并同时设置目录的权限. 选项: -m<目录属性> 建立目录时同时设置目录的权限. [[email protected]_18_121_centos ~]# mkdir -m 775 qin [[email protected

Linux文件操作学习总结【转载】

本文转载自: http://blog.csdn.net/xiaoweibeibei/article/details/6556951 文件类型:普通文件(文本文件,二进制文件).目录文件.链接文件.设备文件.管道文件. 文件的权限:读.写.执行 文件的相关信息:目录结构.索引节点.文件数据 索引节点的stat结构 struct stat{ dev_t st_dev;//文件使用的设备号 ino_t st_inl;//索引节点号 mode_t st_mode;//文件访问权限 nlink_t st_

Linux文件操作相关函数

一.整体大纲 st_mode整体介绍: st_mode详细介绍: 二. Linux文件操作相关函数 1. stat 作用:获得文件信息,也可以获取文件大小. 头文件 #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> 函数原型 int stat(const char *path, struct stat *buf); int fstat(int fd, struct stat *buf); i

第5章 LINUX文件及目录管理命令基础

第5章 LINUX文件及目录管理命令基础5.1 操作LINUX必知必会基础知识5.1.1 Linux命令行组成结构root @ oldboy ~ # :当前用户名 分隔符 主机名 当前用户登陆后的位置,这是个变量 提示符 5.1.2 基本的Linux命令操作语法示例5.1.3 Linux与Windows的目录结构对比5.2 Linux文件及目录核心命令5.2.1 pwd:显示当前所在位置信息"print working directory"-L:逻辑路径:-P:物理路径系统Bash命令

关于Linux文件操作1.1

本文章记录本人在学习Linux中遇到的一些比较好的题目,给大家分享一下. 先来实验题目: 编程实现一个程序,功能是每一秒钟向屏幕打印当前系统时间,和当前行号示例如下 该程序应该无限循环,直到强制中断该进程为止(比如按Ctrl-C中断程序).接着再启动程序,将系统时间追加到原文件之后,并且序号能够接续上次的序号: 好了看完题目后我们应该想的是,实现这么一个功能我们需要什么知识? 我们实现功能的逻辑是什么? 我们在写代码中有什么细节需要注意的(PS:使代码尽善尽美!) a):  先花五分钟想一下这个

Linux文件压缩和解压缩命令

Linux文件压缩和解压缩命令: tar 命令(打包并压缩的话,原文件也会默认存在) -c 建立打包档案 -x 解包 -t 查看包里的类容 -r 向包里追加文件 -v 显示打包过程 -f 文件 比如:命令    参数 包名   要打包的文件路径 tar     cvf  zzj.tar  /ect/zzj/  /ect/ko tar     xvf  zzj.tar(解开文件包) tar     xvfz  zzj.tar.gz(解压成原来压缩的文件) tar     cvfz  zzj.tar

Linux命令总结_文件操作之cut

1.cut命令 语法格式 cut  [-bn] [file] 或 cut [-c] [file]  或  cut [-df] [file],有以下几个选项 -b :以字节为单位进行分割.这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志. -c :以字符为单位进行分割. -d :自定义分隔符,默认为制表符. -f  :与-d一起使用,指定显示哪个区域. -n :取消分割多字节字符.仅和 -b 标志一起使用.如果字符的最后一个字节落在由 -b 标志的 List 参数指示的<br />范围