find、awk和sed的使用:
一、find
find命令是Unix和类Unix系统中一个强大的文件搜索工具,它允许用户在文件系统中按照不同的条件查找文件和目录。由于其灵活性和功能强大,find命令成为系统管理员和开发人员在维护文件系统和查找特定文件时的首选工具。本文将深入介绍find命令的基本语法、常用选项以及高级用法,以帮助读者更全面地了解和使用这个重要的Unix命令。
1.常用选项
| 选项 | 作用 |
|---|---|
| -amin<分钟> | 查找在指定时间曾被存取过的文件或目录,单位以分钟计算; |
| - anewer<参考文件或目录> | 查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录; |
| - atime<24小时数> | 查找在指定时间曾被存取过的文件或目录,单位以24小时计算; |
| - cmin<分钟> | 查找在指定时间之时被更改过的文件或目录; |
| - cnewer<参考文件或目录> | 查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录; |
| - ctime<24小时数> | 查找在指定时间之时被更改的文件或目录,单位以24小时计算; |
| - daystart | 从本日开始计算时间; |
| - depth | 从指定目录下最深层的子目录开始查找; |
| - expty | 寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录; |
| - exec<执行指令> | 假设find指令的回传值为True,就执行该指令; |
| - false | 将find指令的回传值皆设为False; |
1.1 示例:查找大于1MB的文件
find /path/to/search -type f -size +1M
上述命令将在指定路径下查找所有大小大于1MB的文件。
1.2 示例:查找最近7天内修改过的文件
find /path/to/search -mtime -7
这个例子将在指定路径下查找最近7天内修改过的文件。
1.3 示例:查找属主为user1的文件
find /path/to/search -user user1
上述命令将在指定路径下查找所有属主为user1的文件。
1.4 示例:执行自定义命令
find /path/to/search -name "*.log" -exec rm {} \;
这个例子将删除指定路径下所有扩展名为.log的文件。
2.特殊用法
2.1 使用逻辑操作符
find命令支持逻辑操作符,如-a(与)、-o(或)、!(非),用于组合多个条件。
2.1.1 示例:查找大于1MB且是普通文件的文件
find /path/to/search -type f -size +1M -a -type f
上述命令将查找指定路径下所有大小大于1MB且是普通文件的文件。
2.1.2 示例:查找修改时间在7天之前或文件名以.bak结尾的文件
find /path/to/search \( -mtime +7 -o -name "*.bak" \)
这个例子将查找指定路径下修改时间在7天之前或文件名以.bak结尾的文件。
2.2 搜索多个路径
2.2.1 示例:查找多个目录下的所有文件
find /path/to/dir1 /path/to/dir2 -type f
上述命令将在dir1和dir2两个目录中查找所有文件。
2.3 将find结果用于其他命令
2.3.1 示例:在搜索结果中执行grep
find /path/to/search -type f -name "*.txt" -exec grep "pattern" {} \;
上述命令将在指定路径下所有扩展名为.txt的文件中搜索包含指定模式的行。
2.3.2 示例:将搜索结果输出到文件
find /path/to/search -type f -name "*.log" > logfiles.txt
这个例子将查找指定路径下所有扩展名为.log的文件,并将结果输出到名为logfiles.txt的文件中。
二、sed编辑器
1.sed编辑器用法
命令格式
sed -e '操作' 文件l 文件2 ...
sed -n -e '操作' 文件1 文件2 ...
sed -f 脚本文件 文件1 文件2 ...
sed -i -e '操作' 文件1 文件2 ...
sed -e 'n{ #n意为:指定行
操作l
操作2
...
}' 文件1 文件2 ...
常用选项
| 选项 | 含义 |
|---|---|
-e或--expression= | 表示用指定命令来处理输入的文本文件,只有一个操作命令时可省略,一般在执行多个操作命令使用。 |
-f或--file= | 表示用指定的脚本文件来处理输入的文本文件。 |
-h或--help | 显示帮助。 |
-n、--quiet或silent | 禁止sed编辑器输出,但可以与p命令一起使用完成输出。 |
-i | 直接修改目标文本文件。 |
| -r, --regexp-extended | 支持正则表达式 |
常用操作
| 操作 | 含义 |
|---|---|
s | 替换,替换指定字符。 |
d | 删除,删除选定的行。 |
a | 增加,在当前行下面增加一行指定内容。 |
i | 插入,在选定行上面插入一行指定内容。 |
c | 替换,将选定行替换为指定内容。 |
y | 字符转换,转换前后的字符长度必须相同。 |
p | 打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容,如果有非打印字符,则以ASCII码输出。其通常与-n选项一起使用。 |
= | 打印行号。 |
l(小写L) | 打印数据流中的文本和不可打印的AscII字符(比如结束符$、制表符\t) |
常用方式
sed -n -e 'p' testfile1 #打印内容
sed -n -e '=' testfile1 #打印行号
sed -n -e 'l' testfile1 #打印隐藏特殊符号
sed -n -e '=;p' testfile1 #打印行号和内容
sed -n -e '=' -e 'p'testfile1 #打印行号和内容
sed -n '2,${n;p}' testfile1 #从第2行开始,从下一行开始打印,即第3、5、7行
sed -n '/user/p' /etc/passwd #打印包含user的行
sed -n '/^a/p' /etc/passwd #打印以a开头的行
sed -n '/bath$/p' t/etc/passwd #打印以bath结尾的行
替换内容
命令格式
行范围 s/旧字符/新字符串/替换标记
数字 | 表明新字符串将替换第几处匹配的地方 |
g | 表明新字符串将会替换所有匹配的地方 |
p | 打印与替换命令匹配的行,与-n一起使用 |
w 文件 | 将替换的结果写到文件中 |
案例:
sed -n 's/root/admin/gp' /etc/passwd > file #将匹配行所有root替换为admin然后保存替换的行至file
sed 's/root//g' /etc/passwd #将匹配行所有root替换为空的
sed 'l,20 s/^/#/' /etc/passwd #在第1到20行进行注释
sed '/root/ s/^/#/' /etc/passwd #将包含root的行进行注释
sed -rn 's /.*root.*/#&/p' /etc/passwd #用正则匹配行内容,然后通过&获取前面匹配的内容进行注释后打印
sed -ir 's/.*swap.*/#&/' /etc/fstab #禁用swap交换空间
sed -f script.sed testfile2 #对某个文件执行指定命令文件
sed '1,20w out.txt' /etc/passwd
sed '1,20 s/^/#/w out.txt' /etc/passwd #将文件的第1到20行进行注释,然后将修改的行内容保存至指定文件
sed '/45/c ABC' testfile2 #将含有45的行都替换为ABC
sed 'y/145/ABC/' testfile2 #使所有的1字符转换成a,所有的2字符转换成B,所有的3字符转换成c
sed '1,3a ABC' testfile2 #在第1行到第3行后都插入ABC新的一行
三、awk编辑器
1.工作原理
逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。
2.用法
命令格式
awk 选项 '模式或条件 {操作}' 文件1 文件2 ...
awk -f 脚本文件 文件l 文件2 ...
常用选项
-F 指定分隔符
awk -F ',' '{print}' file1
常见的内建变量
| 内建变量 | 含义 |
|---|---|
FS | 列分割符。指定每行文本的字段分隔符,默认为空格或制表位。与-F作用相同。 |
NF | 当前处理的行的字段个数。$NF代表最后一个字段。 |
NR | 当前处理的行的行号(序数)。 |
$0 | 当前处理的行的整行内容。 |
$n | 当前处理行的第n个字段(第n列)。 |
FILENAME | 被处理的文件名。 |
RS | 行分隔符。awk从文件上读取资料时,将根据Rs的定义把资料切割成许多条记录,而awk比较倾向于将一行分成多个一次仅读入一条记录,以进行处理。预设值是\n。 |
常用方式
awk '{print}' testfile1 #输出所有内容
awk 'NR==1 {print}' testfile1 #输出指定行内容(第一行)
awk 'NR==1,NR==3 {print}' testfile1 #输出第1~3行内容
awk '/root/{print}' /etc/passwd #输出含有root的行
awk 'BEGIN{n=0;while("w" | getline) n++ ;{print n-2}}' #调用w命令,并用来统计在线用户数
top -b -n 1 | awk -F"," '/%Cpu/ {print $4}' | awk '{print $1}' #查看当前CPU空闲率
学习干货仅供学习参考!!!
7892

被折叠的 条评论
为什么被折叠?



