当前位置:网站首页>shell编程入门(四)文本处理

shell编程入门(四)文本处理

2020-11-16 18:58:51 超_Charles

1. 文件查找命令

  1. find命令, 语法格式:find 搜索路径 [选项] 搜索内容
选项 解析
-name 按照文件名搜索
-iname 按照文件名搜索,不区分文件名大小
-inum 按照 inode 号搜索
-type 根据文件类型(f:文件,d:目录,c:字符设备文件,b:块设备文件,l:链接文件,p:管道文件)搜索
-size 根据文件大小(单位:ckMGTP)搜索,-小于,+大于,例如查找/etc目录下大于1M的文件:find /etc -size +1M
-mtime 根据修改时间(单位:smhdw)搜索
-ctime 根据创建时间(单位:smhdw)搜索
-atime 根据被访问时的时间间隔(单位:smhdw)搜索
-mmin n分钟以(-n:内,+n:外)内修改的文件
-mindepth 从n级子目录开始搜索,最多搜索到n-1级子目录
-depth 检索深度为 n 的文件,即位于指定目录以下 n 层的文件
-empty 检索空文件或空目录
-perm 根据文件权限搜索
-ls 打印搜索到的文件的详细信息
-delete 删除检索到的文件
-exec 对搜索的文件常用操作("-exec"和"-ok"相似,对文件执行特定的操作,"-ok"得到确认命令后,才会执行;-print打印输出)
  1. locate命令,不同于find命令是在整块磁盘中搜索,locate命令是在数据库文件中查找

    • find是默认全局匹配,locate则是默认部分匹配
    • 文件更新后,用updatedb命令把文件更新到数据库(默认是第二天系统才会自动更新到数据库),否则locate查找不到
  2. whereis命令,只能用于程序名的搜索

    • 命令参数:二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
  3. which命令,仅查找二进制程序文件

2. Linux文本处理三剑客

文本处理三剑客工具grepsedawk都是基于行处理的,它们会一行行读入数据,处理完一行之后再处理下一行。

2.1 文件处理三剑客之grep

grep命令,用于查找文件里符合条件的字符串。

  • 语法格式:
    • 语法1:grep [option] [ pattern] [file1, file2..]
    • 语法2:command | grep [option] [pattern]
选项(option) 解析
-v 不显示匹配行信息
-i 搜索时忽略大小写
-n 显示行号
-r 递归搜索
-E 支持扩展正则表达式
-F 不按正则表达式匹配,按照字符串字面意思匹配
-c 只显示匹配行总数
-w 匹配整词
-x 匹配整行
-l 只显示文件名,不显示内容
-s 不显示错误信息
  • grepegrep
    • grep默认不支持扩展正则表达式,只支持基础正则表达式
    • 使用grep-E可以支持扩展正则表达式使用
    • egrep可以支持扩展正则表达式,与grep-E等价

2.2 文件处理三剑客之sed

sed(Stream Editor),流编辑器。对标准输出或文件逐行进行处理

  • 语法格式:
    • 语法1:stdout |sed [option] "pattern command"
    • 语法2:sed [option] "pattern command" file
选项(option) 解析
-n 只打印模式匹配行
-e 直接在命令行进行sed编辑,默认选项
-f 编辑动作保存在文件中,指定文件执行
-r 支持扩展正则表达式
-i 直接修改文件内容
匹配模式(pattern) 解析
10command 匹配到第10行
10,20command 匹配从第10行开始,到第20行结束10,
10,+5command 匹配从第10行开始,到第16行结束
/pattern1/command 匹配到pattern1的行
/pattern1/,/pattern2/command 匹配到pattern1的行开始,到匹配到patern2的行结束
10,/pattern1/command 匹配从第10行开始,到匹配到pettern1的行结束
/pattern1/,10command 匹配到pattern1的行开始,到第10行匹配结束
# 打印test.txt文件的第17行
sed -n "17p" test.txt

# 打印文件的10到20行
sed -n "10,20p" test.txt

# 打印test.txt文件中从第10行开始,往后面加5行
sed -n "10,+5p" test.txt

# 打印test.txt文件中以root开头的行
sed -n "/^root/p" test.txt

# 打印test.txt文件中第一个匹配到以ftp开头的行,到mail开头的行结束
sed -n "/^ftp/,/^mail/p" test.txt

# 打印test.txt文件中从第4行开始匹配,直到以hdfs开头的行结束
sed -n "4,/^hdfs/p" test.txt

# 打印test.txt文件中匹配root的行,直到第10行结束
sed -n "/root/,10p"test.txt

sed中的编辑命令详解

类别 编辑命令 含义
查询 p 打印
= 只显示行号
增加 a 行后追加
i 行前追加
r 外部文件读入,行后追加
w 匹配行写入外部文件
删除 d 删除
修改 s/old/new 将行内第一个old替换为new
s/old/new/g 将行内全部的old替换为new
s/old/new/2g 将行内从第2个old开始到剩下所有的old替换为new
s/old/new/ig 将行内全部的old替换为new,忽略大小写

版权声明
本文为[超_Charles]所创,转载请带上原文链接,感谢
https://my.oschina.net/chaoo/blog/4720363