shell系列10-其它常用命令

一.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 中可使用的选项有二三十个之多,在此只介绍最常用的部份。

  1. -mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
  2. -amin n : 在过去 n 分钟内被读取过
  3. -anewer file : 比文件 file 更晚被读取过的文件
  4. -atime n : 在过去n天内被读取过的文件
  5. -cmin n : 在过去 n 分钟内被修改过
  6. -cnewer file :比文件 file 更新的文件
  7. -ctime n : 在过去n天内被修改过的文件
  8. -empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name
  9. -ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写
  10. -name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
  11. -size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。
  12. -type c : 文件类型是 c 的文件。
    d: 目录
    c: 字型装置文件
    b: 区块装置文件
    p: 具名贮列
    f: 一般文件
    l: 符号连结
    s: socket
  13. -pid n : process id 是 n 的文件

你可以使用 ( ) 将运算式分隔,并使用下列运算。

  1. exp1 -and exp2
  2. ! expr
  3. -not expr
  4. exp1 -or exp2
  5. 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]]

参数说明:
image.png

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]# 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值