第四章 Linux查找和删选工具

来源:互联网 发布:查看对方mac地址 编辑:程序博客网 时间:2024/05/18 20:34

一,本章内容

1,查找工具find

2,查找文本工具grep

3sed流编辑器

4,转换和删除重复命令tr

5,合并和分割工具

备注:本Linux系统为RHEL5.3

二,查找工具find

找出不知道在什么地方的文件,或是找出某一特征的文件,可以使用find

1find基本格式

find [path] [expression]

expression:用于定义find查找的表达式,表达式通常由选项,测试和动作3类参数组成。

选项用于指定find查找的目录,帮助等信息,常用的选项如下:

help:获得find帮助信息

depth:先从当前目录查找,再从当前目录的子目录查找

maxdepth LEVELS:向下搜索到第层目录,如果LEVELS=0时表示只在当前目录查找

mindepth LEVELS:至少向下搜索LEVELS层目录

mount:不搜索远程文件系统

follow:搜索如果遇到链接文件就和链接文件所指向的文件一并检查

测试参数:想搜索到一些具有某一特征的文件,应该使用一些测试参数,测试参数是一些使得输出更加详细的参数。常用的测试参数如下:

name:按文件名查找

perm:按文件权限查找

type:查找某一类型的文件

mtime +n -n:按文件修改的时间查找,+n表示修改时间距现在n天以前,-n表示修改时间距现在n天以内

atime +n -n:按文件的访问时间查找(使用方法与mtime相同)

size n [c]:搜索如果遇到链接文件就和链接文件所指向的文件一并检查

atime +n -n:按文件的访问时间查找(使用方法与mtime相同)

size n [c]:查找文件长度为n块的文件,c表示文件大小为n字节的文件

User:按文件属主查找

group:按文件属组查找

nouser:查找没有有效属主的文件(文件属主在/etc/passwd文件中不存在)

nogroup:查找没有有效属组的文件(文件属组在/etc/group文件中不存在)

动作参数用于指定如何查找和处理查找到的文件,常用的动作有如下几种:

prune:不在指定目录中查找

print:将查找到的文件输出到标准输出

exec:对查找到的文件执行exec动作后附带的Shell命令

ok:对查找到的文件执行ok动作后附带的Shell命令,在每次执行前将提示用户是否执行

2,按文件名称查找

忘记一个文件存放在什么位置时,可以使用name参数查找,也可使用文件名称通配符配合使用。

 


3,按文件权限查找

使用perm参数按权限查找,需使用八进制表示权限(绝对模式),按权限进行查找,以便发现可能导致泄密,不安全的内容等

    

在当前目录查找其他用户可读,写,执行的文件(这种情况应引起重视),此时应在权限数值前加一个横杠-”(“-”表示使用包含模式)

 

4,按文件的时间戳记查找

当需清理过期的日志或文件时,可按照时间戳查找

查找7天以内修改的文件

 

查找1天前修改的文件

 

5,按文件的长度查找

  使用size按文件大小查找时,可像按时间戳记查找那样使用+n表示文件长度大于n的文件,-n表示文件长度小于n的文件。默认情况文件大小的单位为块(一块512字节),如果以字计算文件长度,应在数字后写小写字母w

 

6,按文件的属主或属组查找

当管理员件将一用户或用户组从系统中清除时,可能需要将该用户或用户组的文件收集起来保存一段时间。

 


7find工具其他参数

使用参数-o将两个不同的参数连接起来

在除了/etc目录的整个目录中查找以”.conf”结尾的文件

 

在本地系统查找

 

8,使用execok处理查找到的文件

使用 exec, ok参数执行shell命令的格式如下:

-exec [Shell命令] { } \;

-ok [Shell命令] { } \;

 

9,使用xargs命令处理查找到的文件

使用execok处理查找到的文件时,存在一些缺陷:

[1] 系统对参数execok传递给shell命令的文件列表长度有一定限制,当find命令查找到用户很多时,会出现参数列表溢出等错误

[2] 参数对find找到的每一个文件发起一个相应的处理进程,当find命令查找到用户很多时,会影响系统性能。

Xargs构造一个参数列表交给命令执行,与exec,ok相比,xargs不一次获取并处理find找到的所有文件,每次获取一部分,处理完毕再获取。整个过程xargs都只发起一个处理进程,对系统性能影响很小。

使用xargs时需要借助管道。

 

10find工具应用实例

使用execok处理查找到的文件时,存在一些缺陷:

[1] 查找需要备份文件

 

[2] 列表过期文件

 

三,查找文本工具grep

从一大堆的命令输出或是文本文件中找到一两行的关键内容,可以使用grep工具进行筛选。

1grep基本格式

grep [option] pattern [file]

grep工具在文件file中找到与字符串pattern匹配的内容,如果找到,则将整行输出到标准输出。常用选项:

i:忽略大小写

n:将结果输出的同时,也输出该行的行号

s:在没有查到匹配的内容时,不显示错误信息

l:从多个文件中查找时,只输出找到匹配内容的文件名称

h:从多个文件查找时,只输出匹配的内容,不显示文件名称

c: 只输出匹配内容的总行数

v:反转查找,即输出匹配内容以外的行

grep在工作时,总是以行为单位,先将文本第一行读入缓冲区进行查找,如找到匹配的字符串,就输出整行,如没有,就丢弃缓冲区内容并读入下一行文本继续查找,直至文本结束。

2grep命令使用

系统有一个学生登记表sudent

[1] 查找包含92的行

 

[2] 使用c选项统计查找到的总行数

[3] 反转查找,查找不含有taixlixia的行

 

[4] 多文件查找

 

 

3,行首,行尾匹配查找

利用文件的行首或行尾进行查找。

 


4grep应用实例

[1] 精简配置文件

除去配置文件中的注释行,和默认配置语句。

 

四,sed 流编辑器

    sed通常用来对多个文件或命令输出进行重复处理。

sed在工作时,总是以行为单位,先将文本第一行读入被称为模式空间的临时缓冲区内。然后再读取第一条编辑指令,使用指令中定义的模式和行号查找,编辑文本。完成编辑后,将结果输出并读取下一行,重复这个过程直到文本结束。除了模式空间以外,sed还使用一个称为保留空间的临时缓冲区,保留空间通常用于暂存编辑内容。

1sed基本格式

 sed [option] command input-file

 sed [option] -f script-file input -file

常用的选项:

 n∶不输出所有行,默认输出所有行。
 e∶允许在该选项后面加一条新的编辑指令。当有多条编辑指令时 ,应该使用该选项逐一添加,如果编辑指令只有一条,可以不使用该选项
 f∶用于指定具有编辑指令的脚本文件
 h∶输出sed的帮助信息

常用的定位方式:

n∶表示行号为n的行

m,n∶表示一个行号的范围,从m行到n

m,n!∶排除第m行到n

/pattern/∶输出匹配pattern的所有行

/pattern1/patter2/∶表示匹配pattern1pattern2的所有行(需用选项e将两个模式隔开)

/pattern/,~n∶从匹配pattern的行开始,向后的n行之间的所有行(即包括匹配行在内,一共n行)

/pattern/,+n∶从匹配pattern的行开始,向后的n行的所有行(即包括匹配行在内,一共n+1行)

n,/pattern/∶表示从第n行开始,到匹配pattern之内的所有行
常用命令:
 a\text∶在指定行后面加入新的文本信息text

 i\text∶在指定行前面加入新的文本信息text

 c\text∶使用新的文本信息text替换指定行

 p∶将指定行输出到标准输出

 P∶将模式空间中第一个换行符”\n”之前的文本输出到标准输出(选项大写)

 =∶输出匹配模式所在的行号

 d∶移除模式空间中的行并读取下一行

 D∶删除模式空间中最后一个换行符之前的文本。如果模式空间为空,则将下一行文本读取到模式空间中

 r file∶从文件file中读取文本
 w file∶将结果写入file文件中

 q∶退出指令,使用q制令可以让sed立即退出,不再执行后面的操作
 !command∶对没有被定位的行使用!之后的command编辑指令

 P∶将与模式patter1匹配的文本用pattern2替换。默认情况下,只替换第一次匹配到的内容。指令s后的分隔符可用任意字符代替。Flag选项通常指示如何替换或者替换成功后要进行的操作,g:将所有匹配到的内容全部替换,n:仅对行内第n次匹配到的内容进行替换,p:如果进行了替换,就将模式空间的文本输出到标准输出,w file:如果进行了替换,就将模式空间的文本写入文件file中)

一个编辑指令只能对指定位置进行一次编辑操作,如要执行多次编辑操作,可使用{}将多条编辑指令放在其中。而对多个位置进行多次编辑可使用选项e添加多条编辑指令,也可使用管道并配合多个sed指令。

常用的分支语句

  :label∶标记点,标记一个位置以便跳转语句跳转到指定位置
   t lable∶测试指令,如果上一条替换指令成功执行,则转移到标记点label处。如没有label,则转移到末尾

   b label∶无条件转移到label处继续执行。如没有label,则转移到末尾

   #:一般用于脚本的注释,sed将忽略后面的内容。如出现在脚本的第一行,且后面是”n”(”#n”)sed将不禁止默认的输出所有行。

2,显示和编辑行

输出文本第三行

 

一使用模式[tTangwei]定位行

 

删除行

 

3,插入和修改行

使用a在第3行后插入一个新行

 

使用行尾匹配插入新行

 

使用换行符插入多行

 

使用r命令读取exfile的内容并插入到第3行之后

 

4,替换文本和其他编辑指令

s/pattern1/pettern2/flag

y/pattern1/pattern2/flag

将匹配到的pattern1pattern2替换,sy都是替换,不同的是y要求pattern1patter2的长度必须相等。

 仅对第3行的第1个匹配到的2827替换

 

一次执行多个命令

 

5,其他

还有分支结构,一般不常用。

另外还有格式化文本数据抽取工具awk,功能比较强大

五,转换和删除重复命令tr

 tr命令用于处理字符转换,删除重复字符等任务。

1tr基本格式

tr [option] [string1] [string2]

tr的基本格式中,string1用于查询字符串,string2用于转换查询到的字符串。tr不能读取文件,因此如果要转换文件中的内容,可以使用重定向输入或管道的方法。

常用选项:

c∶使用string1字符集中的补集替换。要求的字符集为ASCII
d∶删除string1中包含的所有字符

s∶将所有重复出现的字符进行压缩,只保留一个一个字符,即删除重复的字符。

String1string2这两个字符串的形式可以是字符的范围,单个字符,多字符列表等。常见如下:

[a-z]: 小写字母A-Z范围内的字符及其组合而成的字符串

[A-Z]: 大写字母A-Z范围内的字符及其组合而成的字符串

[0-9]: 数字0-9范围内的字符及其组合

[C*n]: C表示字符或字符组合,n表示出现次数。即字符或字符组合出现n次的字符串。

2tr转换

小写字母转换大写字母


3tr删除重复

删除重复字符,需要指定字符串或文本中可能存在重复的字符集合,因此仅需要使用string1即可。

 

删除test2文本中空行

 

注意:tr命令在执行时会逐字符查询处理,因此应特别注意字符集string1的选择。

六,合并和分割工具

Sort处理的文本可以来自一个文本文件,也可以来自标准输入和管道等。

1sort排序指令

sort [option] [file]

b∶按字段进行分类并忽略前面的空格或制表符

d∶按字典的顺序进行排序,将除空格和字母以外的字符排除

f∶排序时忽略大小写

g∶根据数值进行排序

i∶只考虑可打印的字符
M∶将字符按月份进行比较

n∶按数值进行比较排序

r∶反向排序

c∶测试文件内容是否已经排了序,若无任何返回信息,表示已排序
 k∶指定排序的关键字

m∶合并已经排序的文件,不进行排序
o∶将结果写入文件内,不再输出到标准输出

s∶通过屏蔽最后的分类比较稳定排序

  t∶使用指定的字符作为字段分隔符

T∶按临时文件放入指定目录中
 u∶如果与选项c一起使用,则检查是否在排序时已经去除重复的行,没有选项c时,则去除重复行

z∶用一个0字节作为结束,而不是一个换行符
指定排序关键字为第5个字段的第8个字符

 

合并文件,合并前的文件应该已经排好序

 

2cut数据剪切命令

cut [option] file

Cut命令工作时,以行为单位剪切整个文本(对文本每一行生效)。

常用选项:

b∶表示操作的对象是字节

c∶表示操作的对象是字符

f∶表示操作的对象是字段

d∶指定字段分隔符,默认制表符Tab

s∶表示不包含没有字段分割符的行,通常用于去掉注释等

剪贴的范围表示:

N∶表示第N个字节,字符或字段

N-∶表示从N到一行结束内的所有文本
N-M∶从NM之间的所有文本

-M∶从开始到M之间的所有文本
-∶从开始到结束的所有文本

剪切所有行的第5-8个字节

 

3paste数据粘贴指令

    paste [option] [file...]

常用选项:

   d∶对新生成的文本指定新的字段分隔符,默认制表符Tab
    s∶将粘贴的内容合并成行(即横向粘贴)。

使用选项d指定第一第二字段用Tab制表符分割,第二第三使用”#”分割

 

4join数据连接指令

    join [option] file1 file2

常用选项:

a∶用于输出两个文件中有关联的和没有关联的行,将有关联的的行执行连接后输出,没有关联的行按预定的格式输出

e∶在文件1和文件2中查找关联字段,如没有关联字段,则将无关联的行相应的字段用参数指定的字符串替代

i∶在连接过程中忽略大小写

j∶使用指定的字段作为关联字段连接

o∶格式化输出

t∶设置字段间的分隔符,默认空格或者制表符Tab
 v∶与选项a作用相同,但只输出无关联的行

使用join命令时,join用数字1表示参数文件1,用数字2表示参数文件2

 

5uniq去除重复指令

Uniq经常用于去除一个文本中的重复行。Sort去除重复行,两者不同。用sort去除重复行时,sort将整个文本中的多个重复的行去除,仅保留一行,而uniq会将多个连续重复的行去除,仅保留一行。

    uniq [option] [input [output]]

常用选项:

c∶用于输出重复行的重复次数
d∶仅输出重复的行

f∶忽略一些字段,仅比较指定的字段

i∶忽略大小写

s∶忽略一些字符,仅比较指定的字符

u∶输出不重复的行

w∶指定要比较的字符位置

使用f忽略第一个字段,从第2个字段的第3个字符开始去除重复的行

 

6split分割文件指令

split经常用于将很大的文件分割成若干个小文件。

 split [option] [input file] [output file]

常用选项:

l∶按行对文件进行分割
b∶按字节对文件进行分割

C∶按字节对文件进行分割,split会尽量保持一个整行

d∶使用数字作为输出文件的后缀

用选项l3行划分为一个文件,将划分后的文件命名为studentnew


原创粉丝点击