Lixun|Linux 三剑客教程
无论是日常操作还是写 shell, 三剑客用的不比 if、for 用的少。也许你只用过 find
仅查找文件、目录, 其实它还可以对查找的结果进行拷贝和删除等操作; 当我们看着黑窗口中满屏找我们想要信息时 grep
是最好的助手, 除了高亮显示我们需要的信息,grep
还可使用正则匹配,包括统计个数;sed
和 awk
功能也很强大,sed
擅长以行为单位修改文件(这些通常是配置文件),awk
通常用来统计,对以某个分割符分割的文件可以按列操作。
下面进入正题。
find
用于快速查找目录和文件。 格式:
find <search_dir> [option] [option] ...
find <start_dir> -maxdepth <n> -mtime <+-day> -type <type> -name <"name">
常用操作:
# 找到并删除
# 1)加参数 -delete
# 2)使用-exec
find ./ -type d -exec rm -rf {} \;
find ./ -type d -exec |xargs rm -rf
# 3)提前执行find方法
rm -rf `find xxxx`
rm -rf $(find xxx)
# 找到并复制
find ./ -type d |xargs -i cp {} /tem/backup # -i xargs转化后插入到{}
find ./ -type d |xargs cp -t /tem/backup
# 找到并移动
find ./ -type d |xargs -i mv {} /tem/backup # -i xargs转化后插入到{}
find ./ -type d |xargs mv-t /tem/backup # -t 指定移动目录
find ./ -type d -exec mv -rf {} \;
参数:
-maxdepth
最大递归深度-mindepth
最小递归深度-type
指定查找类型,f file, d director-name
指定名称-size
- b Byte(default)
- K 1024Byte
- M
- G
-perm
权限查找 例:-perm 644-delete
找到并删除-exec
运行简单命令find ./ -type f -name "*.txt" -exec rm -rf {} \;
- {} 把查找到的内容放在其中
- \ ; 转义“;”号
find ./ -type f -name "*.txt" -exec cp {} /tmp \;
- 找出并删除/复制
-mtime
_+7
7 天以前 _-7
最近七天 *7
正好前面七天
-mtime 参数参考图:
grep
grep 是常用的搜索命令,可以说除了 cd,ls 等命令外最常用的就是它了,强大的搜索功能,同时搜索出来的内容还可以高亮显示。 使用格式:
grep <关键字> <文件>
在文件中搜索“关键字”| grep <关键字>
在管道流读取的信息中搜索“关键字”
应用场景:
- 日志关键信息检索
- 配置文件检索,排除
- 输出信息检索
- 关键信息排除
使用示例:
#所给样例a.txt内容
100
1000
123456
abcdef
ABCDEF
# 直接查找文件信息
grep 100 a.txt
# 输出
100
1000
# 管道流查看信息
cat a.txt | grep 100
100
1000
# 使用正则匹配
grep -E "^100$" a.txt # 当确定用正则是均加上-E参数,否则有些正则通配符无法匹配
# 排除匹配关键字的行
grep -v "100" a.txt
123456
abcdef
ABCDEF
# 统计关键字匹配次数
grep -c "100" a.txt
参数:
- -B
before,同时显示查找信息的前面 N 行,例: grep -B 1 - -A
after, 同时显示后 N 行, 例:grep -A 1 *-C center, 以查找到内容为中心,显示前后 N 行 - -c count,统计出现次数,例:grep -c
- -v 排除匹配关键字整行
- -o obverse 查看匹配(匹配过程)
- -n 显示行号
- -E 在关键字中使用正则匹配,使用 egrep 命令自动支持扩展正则
sed
强大的修改命令。常处理文本文件(小)、配置文件、日志文件。
格式:sed [参数[ [处理操作] [文件]
sed 执行原理:
sed 使用:
- 使用 sed 进行替换:
sed 's#被替换文本#替换文本#g'
此时 sed 在行中替换出现的关键字打印到屏幕,但是不修改文件,修改时需要加上-i参数
- s :替换
- g :global 替换所有
- 使用 sed 进行查找:
sed '/关键字/p'
检索关键字并输出(p 打印输出)
详细使用下图:
- 使 sed 进行删除:
sed [操作] [文件]
, 可以删除指定的行或者删除含有关键字的行
小技巧和示例:
-
取出 eth0 网卡 ip 地址
ip a s eth0|sed -n '3p'|sed -r 's#^.*inet (.*)/24.*#\1#g'
ip a s eth0|sed -rn '3s#^.*inet (.*)/24.*#\1#gp'
-
修改时进行备份
sed -i.bak 's#aaa#AAA#g' ./aa.txt
注意:n 和 i 参数不要同时使用 -
将当前目录下以 test 开头的.txt 文件改为.jpg 文件
ls test*.txt|sed -r 's#(.*)txt$#mv & \1jpg#g'|bash
- rename 命令的使用:
rename [需要就修改信息] [修改成什么信息] [文件名称匹配]
常用参数:
- -i 插入“替换”串
- -r 匹配正则
- -n 排除不匹配的内容
- -e 写多个命令表达式,实现 sad 处理多要求, 例:
sed -e '/abc/ibefore' -e '/abc/aafter'
操作控制参数:
- p(print)输出信息
- i(insert)插入信息,在指定信息前面插入信息
- a(append)追加信息,在指定信息之后追加信息
- d (delete) 删除行
- ‘/^$/’ 匹配空行
- & 把管道(|)中的数据放到此处
- s (substitute) 替换信息
- g (global)全局操作
awk
具有统计分析文件、对文件中的列操作的功能。常用与文本操作、日志信息统计等。
使用格式:awk [参数[ [处理操作] [文件]
常用处理数据方式: 操作模式: 在操作处理中使用
本文结束。