文本查看和处理命令 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 数单词,轻松掌握文件的基本信息!

posted @ 2025-07-09 17:40  落无一  阅读(22)  评论(0)    收藏  举报