【grep】
grep 是一个强大的文本搜索工具,通常在Linux和Unix系统中使用。
grep 命令的基本语法为:
grep [options] pattern [file...]
pattern 是您要搜索的模式,可以是简单的字符串或正则表达式。
file 是要在其中搜索模式的文件名。如果不指定文件名,则 grep 将从标准输入中读取数据。
-i:忽略大小写
-o:显示匹配本身
-v:显示不被匹配的项
常用grep选项和用法:
1、在文件中搜索指定模式:
grep 'pattern' file.txt
2、递归搜索目录下的所有文件
grep -r 'pattern' directory/
3、忽略大小写:
grep -n 'pattern' file.txt
4、显示匹配行的行号:
grep -n 'pattern' file.txt
5、显示不匹配的行
grep -v 'pattern' file.txt
6、显示匹配行之前/之后的行:
grep -B 2 'pattern' file.txt # 显示匹配行之前的2行
grep -A 2 'pattern' file.txt # 显示匹配行之后的2行
grep -C 2 'pattern'n file.txt # 显示匹配行前后各2行
7、使用正则表达式进行搜索:
grep 'pattern.*' file.txt
8、. \用法
grep '.s' file.txt # (is,as ,s, .代表任意)
grep '\.' file.txt # (找出文中所有的. )
【sed】
sed 是一种流式文本编辑器,常用于对文本进行流式处理和转换。
它可以根据用户提供的编辑命令对文本进行替换、删除、插入等操作。
sed 在Unix/Linux系统中被广泛应用,特别是在Shell脚本和命令行中用于批量处理文本数据。
常见的 sed 命令和用法:
1、替换文本中的指定字符串:
sed 's/old/new/' file.txt
2、全局替换文本中的指定字符串:
sed 's/old/new/g' file.txt
3、删除包含指定字符串的行:(需要-i 保存到文件,否则只是修改了缓存)
sed '/pattern/d' file.txt
4、删除空行:
sed '/^$/d' file.txt
5、在匹配行前后插入文本:
sed '/pattern/i\inserted line' file.txt
# sed "2a 插入信息" file.txt -i (a:在其后,在第二行后一行写入)
# sed "4i 插入信息" file.txt -i (i:在其前;在第4行前一行写入)
# sed "4i 插入信息1。\n(换行) 插入信息2。" file.txt -i
6、在匹配行后追加文本:
sed '/pattern/a\appended line' file.txt
7、打印特定行 (-n常与p一起使用,取消sed的默认输出)
sed -n '5p' file.txt
8、保存修改到原文件:
sed -i 's/old/new/' file.txt
9、使用正则表达式进行替换和匹配:
sed 's/^[0-9]*$/number/' file.txt
10、-e选项:使用 -e 选项可以方便地在单个 sed 命令中应用多个编辑命令b
sed -e 's/old/new/' -e '1,3d' file.txt
【awk】
awk 是一种强大的文本处理工具,用于从结构化文本数据中提取和处理信息。
它支持对文本数据进行逐行处理。
并可以根据用户提供的规则和命令进行数据提取、转换和统计。
语法: awk '[可选参数] 模式 {动作}' 文件
awk擅长格式化输出,所以常用的动作就是print,printf
-F :指定输入文件分隔符
-v :赋值一个用户自定义变量
NR: 行数,行号
NF:列的个数
FILWNAME:文件名
常见的 awk 命令和用法:
1、打印每行的第一个字段:
awk '{print $1}' file.txt # $0一整行,$1第一列
2、打印指定字段:(第二列,第四列)"字符串"代表字符串,BEGIN数据行读取之前执行,END所有数据读取后执行
awk '{print "第一列:"$2,"第二列:" $4}' file.txt
awk 'BEGIN{ print "第一列;第二列"}{print $1 ";" $2} END{print "The file is end"}'
3、根据条件过滤行:
awk '$3 > 50' file.txt # 打印第三列大于50的行
4、使用自定义分隔符(如逗号):
awk -F',' '{print $1}' file.csv
5、计算列的总和:
awk '{sum += $1} END {print sum}' file.txt
6、统计行数:
awk 'END {print NR}' file.txt
7、使用条件判断和循环:
awk '{if ($2 > 50 && /^[0-9]/ ) print $1}' file.txt
8、格式化输出结果:
awk '{printf "Name: %-10s Age: %d\n", $1, $2}' file.txt
9、输出第五行到第六行,并显示行号
awk 'NR==5,NR=6{print NR,$0}' t.txt
NF是字段数的意思,NR是该行第几个字段
10、模式包括某字符串的行
awk '/string/ {print $2}'
练习文本矩阵:
11 12 13 14 15 16 17 18 19
21 22 23 24 25 26 27 28 29
31 32 33 34 35 36 37 38 39
41 42 43 44 45 46 47 48 49
51 52 53 54 55 56 57 58 59
61 62 63 64 65 66 67 68 69
71 72 73 74 75 76 77 78 79
81 82 83 84 85 86 87 88 89
91 92 93 94 95 96 97 98 99
Shell: Shell脚本 Command: 命令 File: 文件
Directory: 目录 Permission: 权限 User: 用户
Group: 组 Root: 根 Sudo: Sudo
Package: 软件包 Repository: 仓库 Kernel: 内核
Service: 服务 Daemon: 守护进程 Firewall: 防火墙
Networking: 网络 SSH: SSH Cron: 定时任务
Backup: 备份 Log: 日志 Monitoring: 监控
Configuration: 配置 Disk: 磁盘 RAID: RAID
【主要区别】
grep 主要用于搜索和匹配文本,适合在文本中查找指定的字符串。
sed 主要用于对文本进行替换、删除、插入等操作,适合批量处理文本数据。
awk 主要用于从结构化文本数据中提取和处理信息,适合进行数据提取、转换和统计。
tip:仅作个人学习笔记使用