一.cut
1.1 cut概述
cut是以每一行为一个处理对象的。cut一般以什么为依据呢? 也就是说,我怎么告诉cut我想定位到的剪切内容呢?
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。
主要参数:
-b :输入每行第n个字符(半角,注意如果有中文将乱码)。
-c :输入每行第n个字符(适用中文)。
-d :自定义分隔符,默认为制表符。
-f :与-d一起使用,指定显示哪个区域。
-n :取消分割多字节字符(例如中文)。仅和-b标志一起使用。
1.2 cut实例
1.txt文本
abc aaaaaaa de
wwwwwww dd zz
ff f f
2.1 按列进行分割
cut -d " " -f 1 1.txt
这个有点类似awk的打印输出列
[root@hp5 tmp]# cut -d " " -f 1 1.txt
abc
wwwwwww
ff
[root@hp5 tmp]# cut -d " " -f 2 1.txt
aaaaaaa
dd
f
[root@hp5 tmp]# cut -d " " -f 3 1.txt
de
zz
f
[root@hp5 tmp]#
[root@hp5 tmp]# cut -d " " -f 2,3 1.txt
aaaaaaa de
dd zz
f f
[root@hp5 tmp]#
[root@hp5 tmp]# cut -d " " -f 1-3 1.txt
abc aaaaaaa de
wwwwwww dd zz
ff f f
[root@hp5 tmp]#
二. find
Linux find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
2.1 语法及参数
语法:
find path -option [ -print ] [ -exec -ok command ] {} \;
参数说明 :
find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部份为 path,之后的是 expression。如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression。
expression 中可使用的选项有二三十个之多,在此只介绍最常用的部份。
- -mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
- -amin n : 在过去 n 分钟内被读取过
- -anewer file : 比文件 file 更晚被读取过的文件
- -atime n : 在过去n天内被读取过的文件
- -cmin n : 在过去 n 分钟内被修改过
- -cnewer file :比文件 file 更新的文件
- -ctime n : 在过去n天内被修改过的文件
- -empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name
- -ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写
- -name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
- -size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。
- -type c : 文件类型是 c 的文件。
d: 目录
c: 字型装置文件
b: 区块装置文件
p: 具名贮列
f: 一般文件
l: 符号连结
s: socket - -pid n : process id 是 n 的文件
你可以使用 ( ) 将运算式分隔,并使用下列运算。
- exp1 -and exp2
- ! expr
- -not expr
- exp1 -or exp2
- exp1, exp2
2.2 实例
-- 将当前目录及其子目录下所有文件后缀为 .c 的文件列出来:
find . -name "*.c"
-- 将当前目录及其子目录中的所有文件列出
find . -type f
-- 将当前目录及其子目录下所有最近 20 天内更新过的文件列出
find . -ctime 20
-- 查找 /var/log 目录中更改时间在 7 日以前的普通文件,并在删除之前询问它们
find /var/log -type f -mtime +7 -ok rm {} \;
-- 查找当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件
find . -type f -perm 644 -exec ls -l {} \;
-- 查找系统中所有文件长度为 0 的普通文件,并列出它们的完整路径
find / -type f -size 0 -exec ls -l {} \;
用的比较多的,清理超过7天的以 .sql结尾的文件
find /backup -name "*.sql" -mtime +7 -exec rm {} \;
三. sort
Linux的sort命令就是一种对文件排序的工具,sort命令的功能十分强大,是Shell脚本编程时常用的文件排序工具;
sort命令与awk一样,将文件看作记录和域进行处理,默认的域分隔符是空格符,sort命令的格式为:
3.1 语法及参数
语法:
sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件][-k field1[,field2]]
参数说明:
3.2 实例
CARGO.db
ThinkPad:USA:14000:2009:X301
ThinkPad:USA:14000:2009:X301
ThinkPad:USA:14000:2009:X301
HP:China:5600:2010:DM3
SumSung:Korea:5400:2009:Q308
ThinkPad:USA:14000:2009:X301
IdeaPad:China:8000:2007:U450
Acer:Taiwan:8000:2010:PT210
Acer:Taiwan:8000:2010:PT210
3.2.1 字符首字母排序
-t: 冒号为分割域,以首字母的字符来排序
[root@node1 sort]# sort -t: CARGO.db
Acer:Taiwan:8000:2010:PT210
Acer:Taiwan:8000:2010:PT210
HP:China:5600:2010:DM3
IdeaPad:China:8000:2007:U450
SumSung:Korea:5400:2009:Q308
ThinkPad:USA:14000:2009:X301
ThinkPad:USA:14000:2009:X301
ThinkPad:USA:14000:2009:X301
ThinkPad:USA:14000:2009:X301
3.2.2 按指定域排序
-k2按照第二域进行排序
[root@node1 sort]# sort -t: -k2 CARGO.db
HP:China:5600:2010:DM3
IdeaPad:China:8000:2007:U450
SumSung:Korea:5400:2009:Q308
Acer:Taiwan:8000:2010:PT210
Acer:Taiwan:8000:2010:PT210
ThinkPad:USA:14000:2009:X301
ThinkPad:USA:14000:2009:X301
ThinkPad:USA:14000:2009:X301
ThinkPad:USA:14000:2009:X301
-k3按照第三域排序,第三域是数字,但是这个地方却是按照字符串排序,也就是按照第一个数字的大小排序
[root@node1 sort]# sort -t: -k3 CARGO.db
ThinkPad:USA:14000:2009:X301
ThinkPad:USA:14000:2009:X301
ThinkPad:USA:14000:2009:X301
ThinkPad:USA:14000:2009:X301
SumSung:Korea:5400:2009:Q308
HP:China:5600:2010:DM3
IdeaPad:China:8000:2007:U450
Acer:Taiwan:8000:2010:PT210
Acer:Taiwan:8000:2010:PT210
-k3n 按照第三域数字排序
[root@node1 sort]# sort -t: -k3n CARGO.db
SumSung:Korea:5400:2009:Q308
HP:China:5600:2010:DM3
Acer:Taiwan:8000:2010:PT210
Acer:Taiwan:8000:2010:PT210
IdeaPad:China:8000:2007:U450
ThinkPad:USA:14000:2009:X301
ThinkPad:USA:14000:2009:X301
ThinkPad:USA:14000:2009:X301
ThinkPad:USA:14000:2009:X301
-k3nr 按照第三域数字逆向排序
[root@node1 sort]# sort -t: -k3nr CARGO.db
ThinkPad:USA:14000:2009:X301
ThinkPad:USA:14000:2009:X301
ThinkPad:USA:14000:2009:X301
ThinkPad:USA:14000:2009:X301
Acer:Taiwan:8000:2010:PT210
Acer:Taiwan:8000:2010:PT210
IdeaPad:China:8000:2007:U450
HP:China:5600:2010:DM3
SumSung:Korea:5400:2009:Q308
3.2.3 去掉重复行
-u 去掉重复行
[root@node1 sort]# sort -t: -k3nr -u CARGO.db
ThinkPad:USA:14000:2009:X301
IdeaPad:China:8000:2007:U450
HP:China:5600:2010:DM3
SumSung:Korea:5400:2009:Q308
3.2.4 输出重定向
-o 将输出重定向到一个文件中
[root@node1 sort]# sort -t: -k3nr -o PRICE.db CARGO.db
3.2.5 测试是否排序
-c选项,测试是否排序
[root@node1 sort]# sort -t: -c CARGO.db
sort:CARGO.db:4:无序: HP:China:5600:2010:DM3
四.uniq
Linux uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。
uniq 可检查文本文件中重复出现的行列。
4.1 语法及参数
语法:
uniq [-cdu][-f<栏位>][-s<字符位置>][-w<字符位置>][--help][--version][输入文件][输出文件]
参数:
-c或--count 在每列旁边显示该行重复出现的次数。
-d或--repeated 仅显示重复出现的行列。
-f<栏位>或--skip-fields=<栏位> 忽略比较指定的栏位。
-s<字符位置>或--skip-chars=<字符位置> 忽略比较指定的字符。
-u或--unique 仅显示出一次的行列。
-w<字符位置>或--check-chars=<字符位置> 指定要比较的字符。
--help 显示帮助。
--version 显示版本信息。
[输入文件] 指定已排序好的文本文件。如果不指定此项,则从标准读取数据;
[输出文件] 指定输出的文件。如果不指定此选项,则将内容显示到标准输出设备(显示终
4.2 实例
testfile
test 30
test 30
test 30
Hello 95
Hello 95
Hello 95
Hello 95
Linux 85
Linux 85
测试记录:
[root@hp8 tmp]# uniq testfile
test 30
Hello 95
Linux 85
[root@hp8 tmp]# uniq -c testfile
3 test 30
4 Hello 95
2 Linux 85
[root@hp8 tmp]#
网友评论