linux第三部分:文本查看与处理

30.cat:输出文本内容到屏幕

适合查看小文件,100行以内的文件

cat filename(文件名)

#文本重定向
cat << EOF >> test.txt大于号后面是文件名
hello
你好世界
EOF


31.tac:倒序输出

tac filename

32.more:翻页查看(只能向下)

more filename
回车键:一行行的翻
空格键:一屏一屏翻
q 退出

33.less:翻页查看(上下翻页)

less filename
回车键:一行行翻
空格键:一屏一屏翻
上下方向键
q退出
/查找

34.head:查看文件头部

head -n 5 filename
默认s行

35.tail:查看文件尾部

tail -n 5 filename
# 实时查看日志更新
tail -f /var/log/message

Linux文件处理四剑客

36.find: 文件查找

  • 命令格式:find 路径 选项1 条件1 选项2 条件2

  • -name:通过文件名查找,可以使用通配符*

  • -type:通过文件类型查找,常见类型f文件、d目录、b快文件、l链接文件、c字符文件、s套接字

  • -mtime:通过修改时间查找,+1一天以上的文件,-1一天以内,1大约一天

  • -size:通过文件大小查找N[bcwkmg]

  • -i:忽略大小写

    • b 块(512字节)

    • c 字节

    • w 字

    • k 千字节

    • M 兆字节

    • G 吉字节

    • +大于-小于

      # 单一条件查找
      find  / -name "*.log"
      # 多条件查找
      find  / -iname "*root*"  -type f   -mtime -1  -size +1k
      # 对找的文件执行-exec
      mkdir /root/logs
      find  / -name "*.log" -exec  cp {} /root/logs  \;
      
      

37.grep: 字符过滤查找

  • 格式:grep 选项 条件 文件路径

  • 或者使用管道符过滤前一个命令的执行结果

  • 常用选项:

    • -n: 显示行号

    • -v: 反向选择(输出不匹配内容的行)

    • -r: 递归查找,在目录中所有文件内查找

    • -i: 忽略大小写匹配,如 grep -i "test" file.txt 会匹配 Test/TEST

    • -c: 仅统计匹配的行数,不显示具体内容,如 grep -c "error" log.log

    • -l: 只显示包含匹配内容的文件名(多文件 / 递归时用),如 grep -l "config" /etc/*

    • -E: 启用扩展正则(等价 egrep ),支持 |(或)等语法,如 grep -E "error|warn" app.log

    • -o: 仅提取每行中匹配的片段,而非整行,如 grep -o "[0-9]+" data.txt

    • |: 一个命令的执行结果进行再次过滤(管道传递,如 ps -ef | grep "java"

      正则表达式基础

    • 通过

    • 符号 含义
      普通字母、数字、汉字 匹配自己
      . 任意一个字符
      [a-z] 匹配任意小写字母
      [0-9] 匹配任意一个数字
      [a-z A-Z 0-9_] 匹配变量名
      [^0-9] 匹配非数字
      a|b 匹配非数字
      ^ 匹配以什么开头
      $ 匹配以什么结尾的内容
      ^$ 匹配空白行
      () 分组匹配

      量词符号

      符号 含义
      * 匹配任意次0~∞
      匹配0或1次,非贪婪模式
      + 匹配1~∞
      匹配n次
      匹配n~m次

      正则案例:

    38.sed: 文件流编辑(三剑客老二)

    不用打开文件,直接通过sed命令就可以修改文件;

    查找、替换、删除、添加、支持正则表达式。

    流编辑,按行处理数据,每一行就是一条数据。

命令格式:sed [选项] '指令' 文件

-i:对文件本身进行操作,不加则不会修改文件。

-i.bak:修改前对原文件进行备份。

-n:输出时只显示sed执行后的结果。

# sed 指令
# s 替换指令's/old/new/g'
# p 打印结果和-n连用
# a 下一行添加
#i 上一行添加
# sed 替换标记
# g 全局
# d 删除找到的行,也可以指定第几行
## 替换文本内容

sed ‘s/old/new/g' filename
# 输出结果改变,原文件不改变
sed -i ‘s/old/new/g' filename
# 修改并备份
sed -i.bak ‘s/old/new/g' filename
# 修改并备份,新文件修改,原文件不动

# 查找内容
sed '/cn/p' filename

# 输出某行,或某几行
sed -n '1,2 /root/ p' /etc/passwd
sed -n ‘4 p’

# 添加
# 第一行下发添加一行新内容
sed '1 a/hello/' filename
#第三行上方添加一行新的内容
sed '3 i hello' filename

# 删除找到的行
sed '/@/ d' test.tx
# 删除1,2,行
sed '1,2 d' test.tx
  • 强大的流式编辑器,支持查找、替换、删除、插入等操作,适用于文本处理和自动化脚本。

39.awk: 一个伪装成命令的脚本语言(三剑客老大)

擅长对列操作,适合处理结构化的文件

ID Name Age Sex

擅长对列操作,适合处理结构化的文件。

命令格式:awk [选项] ‘指令’ 文件

  • 选项:
    • -F:指定分隔符,/etc/passwd 中的分隔符是 “:”,csv 文件分隔是 “,” 默认是空格或 “\t”。
# $0 一整行内容
# $1 第一列
# $2 第二列
# ...
#$NF 最后一列
# NR是行号
awk '{ print $1 }' filename
# $1表示第一列,filename表示文件
awk -F"," '{ print $2}' test.txt
# ,表示文件分隔,$2表示第二列 后缀文件名,“,”分隔符用双引号,花括号用单引号''
ip a | grep brd | sed -n '3 p' | awk '{print $2}'| awk -F"/" '{print $1}'

# 进行条件查询
cat test.txt
id,name,age,sex
1,张三,18,男
2,李四,19,女
3,王五,20,男
# 使用if()实现条件判断,输出满足条件
awk -F"," '{if($4=="女") print $2}' test.txt
#查询第四列为女的选项,输出第2列内容(姓名),按’,‘分列
awk -F"," '{if($1==2) print $0}' test.txt
#查询第1列为2的选项,输出一整行内容,按’,‘分列
awk -F"," '{if($3>18 && NR >1) print $0}' test.txt
#查询第三列大于18的数字,行号大于1的,输出整行

“从数据中提取你想要的信息,用它事半功倍!”

用法:awk '条件 { 动作 }' 文件

  • 适合处理结构化文本,如日志、CSV 文件,支持模式匹配、字段操作、条件过滤等。
posted @ 2025-07-10 17:00  秀妍泽  阅读(32)  评论(0)    收藏  举报