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 [参数[ [处理操作] [文件]

常用处理数据方式: 在这里插入图片描述 操作模式: 在操作处理中使用 在这里插入图片描述

本文结束。