文本查看和处理命令 30~40
第三部分:文本查看与处理
30.cat:输出文本内容到屏幕上
- 适合查看小文件,100行以内的文件
#查看文件内容
cat 文件名
-------------------
#文本重定向
cat << EOF >> text.txt
123
你好世界
EOF
#可以将内容写入test.txt文件内
--------------------
cat << EOF > text.txt
123
EOF
#可以将内容写入test.txt文件内将文件原有的内容代替
--------------------
>test.txt
#可以将test.txt文件里的内容全部清空
--------------------
# 显示文件内容(-n : 加上行号)
cat -n combined.txt
--------------------
31.tac:按倒序输出文本内容到屏幕上
tac test.txt #是反过来显示内容,最后一行先显示
32.more:翻页查看(只能向下翻)
more filename
#回车键:一行行的翻
#空格键:一屏屏的翻
#q:退出
33.less:翻页查看(上下翻页)
less filename
#上下方向键
#回车键:一行行的翻
#空格键:一屏屏的翻
#q:退出
#输入 /关键词 搜索
34.head:查看文件头部
head filename # 查看文件前10行
head -n 5 filename # 查看文件头部前5行
35.tail:查看文件尾部
tail filename # 查看文件后10行
tail -n 8 file.txt # 看最后 8 行
--------------------
#实时监控文件变化
tail -f file.txt # 动态显示新增内容
Linux文件处理四剑客
36.find:文件查找
用法:find [搜索路径] [条件] [操作]
- 灵活强大的文件查找工具,支持按文件名、类型、大小、修改时间等条件精准搜索,还能直接对结果执行操作。
- 可以多条件进行筛选查找。
常用操作:
# 1. 按名称查找:查找当前目录下名为 file.txt 的文件
find . -name "file.txt"
# 2. 忽略大小写:查找文件名中包含 test 的文件
find /path/to/dir -iname "*test*"
# 3. 按类型查找:查找当前目录下所有目录
find . -type d
# 4. 按大小查找:找出大于 10MB 的文件
find . -size +10M
# 5. 按时间查找:查找最近 7 天修改过的文件
find . -mtime -7
# 6. 结合操作:查找 .log 文件并删除
find . -name "*.log" -exec rm {} \;
# 7. 结合操作:查找 .log 文件进行查找并拷贝到/root/logs
find . -name "*.log" -exec cp {} /root/logs \;
小总结:
- 按文件名: 用
-name或-iname匹配文件名(-iname忽略大小写),可以使用通配符*。 - 按类型: 用
-type筛选类型(d目录,f文件,b块文件,l链接文件,c字符文件,s套接字)。 - 按大小: 用
-size精确筛选文件大小(b,c,w,k,M,G)[+ 是大于的文件,- 是小于的文件]。- b —— 块(512字节)
- c —— 字节
- w —— 字(2字节)
- k —— 千字节
- M —— 兆字节
- G —— 吉字节
- 按时间: 用
-mtime通过修改时间来查找,+1一天以上的文件,-1一天以内的文件,1大约一天。 - 结合操作: 用
-exec对查找到的结果执行操作,例如cp/mv/rm等操作。
find 是命令行下的文件管理利器,搜索与操作一气呵成!
37.grep:字符过滤查找
用法:grep [选项] "关键词" 文件/目录
或者 使用管道符过滤前一个命令的执行结果
- 文本搜索神器,支持关键词匹配、忽略大小写、行号显示等功能,适合日志分析、快速定位问题。
常用操作:
# 1. 查找文件中包含 "error" 的行
grep "error" logfile.txt
# 2. 忽略大小写匹配 -i 忽略大小写
grep -i "error" logfile.txt
# 3. 显示匹配行的行号 -n 显示行号
grep -n "error" logfile.txt
# 4. 递归搜索目录下所有文件
grep -R(r) "error" /path/to/directory
# 5. 反向匹配:只显示不包含 "error" 的行
grep -v "error" logfile.txt
# 6. 搜索多个关键词(用 \| 分隔)
grep -E "error|fail" logfile.txt
# 7. 统计匹配的行数
grep -c "error" logfile.txt
# 8. 只显示匹配的文件名
grep -l "error" *.txt
# 9.递归搜索 + 忽略二进制文件
grep -nRI "keyword" /path/to/directory
#将前一个命令的执行结果进行查找过滤
ip a | grep "inet" | grep brd
小总结:
- 匹配方式: 默认区分大小写,
-i忽略大小写,-E支持多关键词匹配。 - 显示信息: 用
-n显示行号,用-c统计匹配行数,用-l仅列出文件名。 - 过滤内容: 用
-v显示不匹配关键词的内容。 - 递归搜索: 用
-r搜索目录及子目录中的所有文件。 - 使用管道符过滤前一个命令的执行结果:用
|进行隔开,将前一个命令的执行结果进行查找过滤。 -E:等价egrep,实现正则表达式的增强型语法。
grep 是命令行中的搜索神器,轻松应对日志分析和快速文本定位!
正则表达式:
通过一些具有特殊功能的符号,实现对文本的查找,替换,删除等功能。
元符号
| 符号 | 含义 |
|---|---|
| 普通字母、数字、汉字 | 匹配自己 |
| . | 任意一个字符 |
| 【a-z】 | 匹配任意小写字母 |
| 【0-9】 | 匹配任意一个数字 |
| 【a-z0-9A-Z】 | 匹配变量名 |
| 【^0-9】 | 匹配非数字 |
| a|b | 匹配a或b |
| ^ | 匹配以什么开头的内容 |
| $ | 匹配以什么结尾的内容 |
| ^$ | 匹配空白行 |
| () | 分组匹配 |
量词符号
| 符合 | 含义 |
|---|---|
* |
匹配任意次0~∞ |
? |
匹配0或1次,非贪婪模式(尽可能少的匹配) |
+ |
匹配1~∞次 |
{n} |
匹配n次 |
{n,m} |
匹配n~m次 |
正则案例:
-------------------
#用户名
^[a-zA-Z0-9_-]{4,16}$
#验证 数字、字母、_、-,不包含特殊字符,长度 4-16 之间。
-------------------
#密码强度(宽松)
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
#必须是包含大小写字母和数字的组合,长度在 8-10 之间。
-------------------
#匹配注释行
^#
-------------------
#匹配IP地址
192.168.8.10
([0-9]{1,3}\.){3}([0-9]{1,3})
-------------------
#grep 使用正则
grep -E “([0-9]{1,3}\.){3}([0-9]{1,3})” /etc/【文件目录】
38.sed:文件流编辑器
不用打开文件,直接通过sed命令就可以修改文件;
查找,替换,添加,删除,支持正则表达式。
流编辑:按行处理数据,每一行就是一条数据。
“批量修改文件、替换文本内容,用它效率倍增!”
用法:sed [选项] '命令' 文件
- 强大的流式编辑器,支持查找、替换、删除、插入等操作,适用于文本处理和自动化脚本。
常用操作:
# 选项
# 1. 查找并替换:将文件中所有的 "old" 替换为 "new"(不会对文件本身进行修改)
sed 's/old/new/g' file.txt
# 2. 只显示替换后的结果,不修改原文件
sed 's/old/new/g' file.txt
# 3. 直接修改文件本身(加 -i)
sed -i 's/old/new/g' file.txt
# 修改前对原文件进行备份
sed -i.bak 's/old/new/g' file.txt
# 4. 删除包含 "unwanted" 的行
sed '/unwanted/d' file.txt
# 5. 输出时只显示sed执行的结果,显示文件的特定行(如第 5 行)
sed -n '5p' file.txt
sed -n '/12/p' 1.txt #查找包含12的行
# 6. 批量插入内容:在文件每一行后添加 "END"
sed 's/$/ END/' file.txt
#sed 指令
# s 替换指令 g表示全局替换
# p 打印结果
# a 向下方添加
# i 向上方添加
# d 删除查找到的内容
## 替换文本内容
sed 's/old/new/g' 1.txt #输出的结果被替换,不改变原文件
sed -i 's/old/new/g' 1.txt #修改原文件
sed -i.bak 's/old/new/g' 1.txt # 修改并备份原文件
#查找内容
sed -n '/ad/p' 1.txt # 查找有ab 的行
#输出某行,或某几行
sed -n'5p' 1.txt #打印第5行
#添加
sed '1 a hello' 1.txt # 在第一行下面添加hello
sed '1 i hello' 1.txt # 在第一行上面添加hello
#删除
sed '/@/d' 1.txt # 删除有@的行
sed '1,2d' 1.txt # 删除1,2行
小总结:
- 查找替换: 用
s/old/new/g替换文本内容。 - 直接修改: 加
-i参数直接修改文件内容。 - 删除行: 用
/pattern/d删除匹配的行。 - 插入内容: 用
s/$/ 内容/在每行末尾添加内容。
sed 是命令行下的文本处理神器,快速、强大、灵活!
39.awk:一个伪装成命令的脚本
三剑客老大
擅长对列操作,适合处理结构化的文件。
“从数据中提取你想要的信息,用它事半功倍!”
用法:awk [选项] '指令' 文件
- 适合处理结构化文本,如日志、CSV 文件,支持模式匹配、字段操作、条件过滤等。
常用操作:
- -F :指定分隔符, /etc/passwd中的分隔符是“ :”,csv文件分隔符是“ ,”默认是空格或“ \t ”.
#$0 一整行内容(所有内容)
#$1 第一列
#$2 第二列
#.....
#$NF 最后一列
#$NR 显示行号
# print 打印输出
awk -F":" '{print $1}' 1.txt #以 :来分隔的第一列内容
# 进行条件查询
cat 1.txt
id,name,age,sex
1,张三,18,男
2,李四,20,女
3,王五,19,女
#使用if()实现条件判断,输出满足条件的内容
awk -F"," '{if($4=="女") NR print $2}' 1.txt
awk -F"," '{if($1==2) print $0}' 1.txt
awk -F"," '{if($3>18 && NR>1) print $0}' 1.txt
# 1. 打印每行的第 1 列和第 3 列
awk '{print $1, $3}' file.txt
# 2. 打印包含关键字 "error" 的行
awk '/error/ {print}' file.txt
# 3. 条件过滤:打印第 3 列值大于 100 的行
awk '$3 > 100 {print}' file.txt
# 4. 在输出中添加分隔符(如逗号)
awk '{print $1 "," $2}' file.txt
# 5. 统计行数
awk 'END {print NR}' file.txt
# 6. 处理 CSV 文件:打印第 2 列
awk -F ',' '{print $2}' file.csv
# 7. 计算列总和:统计第 3 列的总和
awk '{sum += $3} END {print sum}' file.txt
小总结:
1、字段操作:$1, $2, $3 表示第 1、2、3 列。
2、条件过滤: 用 /pattern/ 或条件语句(如 $3 > 100)。
3、自定义分隔符: 用 -F 指定分隔符(如 -F ',' 处理 CSV 文件)。
4、内置变量:
NR:行号。NF:字段数。$0:整行内容。
awk 是文本处理的瑞士军刀,数据提取与分析的利器!
40.wc:统计文件信息
“想知道文件有多少行、多少单词?它帮你算清楚!”
用法:wc [参数] 文件名
常用参数:
-l:统计行数
wc -l file.txt
显示文件的总行数。
-w:统计单词数
wc -w file.txt
统计文件中有多少个单词。
wc 的几个参数简单又实用,-l 数行,-w 数单词,轻松掌握文件的基本信息!
浙公网安备 33010602011771号