Linux文本处理工具

Linux文本处理工具

Linux中熟练的使用文本处理工具非常的重要, 因为Linux在设计的时候是采用一切皆文件的哲学的, 甚至连计算机中的配置也都使用伪文件系统来表示, 要查询里面的内容就是对文件进行操作, 所以学会使用文件处理工具事半功倍。而在一切皆对象的Windows中, 因为对象封装了所有的操作, 包括显示标准输出的结果, 使用过powershell的人应该知道, 标准输出流显示的结果, 也就是控制台上显示的结果也都是对象, 而不是单纯的文本, 我们可以获取这个对象并调用器API对他进行更近一步的操作, 这个可以说是Windows平台上的一个优点

find

  • -name
  • -type: f, d
  • -maxdepth: 查找的深度, 也就是目录递归的深度, 为1就是在当前目录查找
  • -regex: 正则表达式匹配, 是全路径匹配
  • -iregex: 忽略大小写的正则表达式匹配
  • -delete: 删除找到的文件或者目录
  • -print: 打印出结果, 默认就是这个选项, 打印出来的结果默认是\n分隔的
  • -print0: 将打印出来的结果使用\0进行分隔
  • -exec {} ;
  • -atime: 访问时间, 单位是天, -atime 3 表示3天内访问
  • -mtime: 修改内容时间
  • -ctime: 修改元数据时间, 只要出发了atime或者mtime, ctime一定会改变
  • -amin: 和atime一样, 只是单位为分钟
  • -mmin: 和mtime一样, 只是单位为分钟
  • -cmin: 和ctime一样, 只是单位为分钟
  • -user
  • -perm
  • -newer
  • -nouser
  • -nogroup
  • -size: -size +5M -size -10M, 表示在5-10M的文件或则目录
  • 分组使用( ): find . ( -name '.txt' -o -name '.pdf' ) -print

grep

  • -e: 多模式匹配
  • -c: 计数
  • -o: 只显示查找到的结果, 在没有指明-o选项时显示的是匹配到一行
  • -v: 只输出没有匹配到的行
  • -n: 打印行号
  • -i: 忽略大小写
  • -l: 只打印文件名
  • -R: 递归

xargs

  • 将输入的数据转换为特定的命令行参数, 与普通的如ls | grep -n 'python'不同, 这里的grep通过管道接受到的是输入的数据不是命令行参数

sort

  • -k: 指定第几列进行排序
  • -d: 按照字典进行排序
  • -n: 按照数据进行排序
  • -r: 逆序

uniq

  • -c: 统计
  • -d: 打印重复行
  • -u: 去掉重复行

wc

  • -l: 行数
  • -w: 单词书
  • -c: 字符数

sed(文本替换利器)

  • -e: 多模式匹配, sed -e '/^$/d' -e '///.*/d' file 删除空白行和注释行
  • s: 表示replace
  • g: 表示全局
  • -i: 表示inplace
  • sed 's/text/replacetext/' file
  • sed 's/text/replacetext/g/' file # 全局替换
  • sed -i 's/text/replacetext' file # 直接修改到原文件中
  • sed '/^$/d' file 删除空白行
  • sed '///.*$/d' file 删除C语言的注释
  • sed '/^#.*$/d' file 删除Python注释
  • sed 's/[a-z]+/\U&/' file 转大写, 只在Linux中有效, 在macOS上无效
  • sed 's/[A-Z]+/\L&/' file 转小写, 在macOS上无效

paste(文本合并, 与cut相反)

  • 将两个文本按照列合并
  • -d: 指明合并之后使用什么分隔

tr(是简化版本的sed, 当tr不能完成的时候使用sed, 因为tr对正则表达式支持不好)

  • -s: 压缩字符, tr -s '\n' file, 遇到连续的两个\n将其压缩成为一个, 功能是删除空行
  • -c: 取补集, tr -c 'a-z' 则取的就是在a-z之外的
  • -d: 删除匹配的

总结

  • 开发者常用的是sed, tr, find 和 grep
  • 在处理文本替换的时候使用sed, tr在加密的时候使用cat /dev/urandom | head -c 64 | tr -d -c 'a-zA-Z0-9_'
上一篇:理解 Linux 的虚拟内存


下一篇:杭电 1061 Rightmost Digit计算N^N次方的最后一位