Linux文本处理三剑客

grep(文本过滤)

  • grep 使用基础正则表达式匹配
  • egrep 使用扩展正则表达式匹配
  • fgrep 不使用正则表达式匹配,速度最快
[root@stardust ~]# grep -v 排除指定字符串
[root@stardust ~]# grep -i 忽略大小写匹配
[root@stardust ~]# grep -n 显示匹配到的行号
[root@stardust ~]# grep -c 显示匹配行数
[root@stardust ~]# grep -o 仅显示匹配到的字符串
[root@stardust ~]# grep -q 静默模式 不输出任何信息 配合$?使用
[root@stardust ~]# grep -w 精确匹配

[root@stardust ~]# grep -A 显示匹配行及后面N行
[root@stardust ~]# grep -B 显示匹配行及前面N行
[root@stardust ~]# grep -C 显示匹配行及前后N行

[root@stardust ~]# grep -E egrep
[root@stardust ~]# grep -G grep
[root@stardust ~]# grep -F fgrep
[root@stardust ~]# grep -P 使用perl的正则

sed(行编辑器)

sed(Stream Editor)操作文件时,每次从源文件中读取一行到sed工作的模式空间(pattern space)中,在模式空间中对数据进行操作后,将文本流输出至屏幕

常用选项

  • -n 静默模式,不输出模式空间中的内容至屏幕
  • -e script 多点编辑功能,在一个sed命令中执行多个编辑操作
  • -f script-file 指定脚本文件
  • -r 支持使用扩展正则表达式
  • -i 修改原文件
    • -i.bak 修改前自动创建备份文件

地址定界

  • 不给地址 对全文进行处理
  • 单个地址
    • number 指定的行
    • /pattern/ 被此模式所能匹配到的每一行
  • 地址范围
    • num1,num2 从num1到num2之间的行
    • num1,+num2 从num1起到之后的num2行
    • /pat1/,/pat2/ 两个pattern之前的行
    • num,/pat1/ 从num起到pat区间的行
    • /pat/,~num 匹配行步进num行
  • 步进 ~
    • num1~num2 从num1开始,每隔num2行操作。
    • 1~2 显示奇数行
    • 0~2 显示偶数行

编辑命令

  • d 删除
  • p 显示模式空间中的内容
  • a 行后追加文本
  • i 行前插入文本
  • c 替换行的文本内容
  • w FILE 把模式空间中匹配到的行保存到指定文件
  • r FILE 把指定文件的文本流读取到当前文件匹配行的行后

  • = 为模式空间中的行显示行号

  • ! 对地址定界取反
  • s/// 查找替换 使用方法同vim中的s///
    • 同vim,默认只替换一行中第一个匹配的内容 区分大小写
    • i 不区分大小写
    • g 全局替换 每一个匹配的元素都替换
    • p 配合-n使用,只显示处理过的行
    • w FILE 将处理过的行 保存至指定文件
  • ; 如果在一次执行时包含多个处理命令,需要使用分号分割

高级编辑命令

  • h 把模式空间中的内容覆盖至保持空间中
  • H 把模式空间中的内容追加至保持空间中
  • g 从保持空间取出数据覆盖至模式空间
  • G 从保持空间取出内容追加至模式空间
  • x 把模式空间中的内容与保持空间中的内容进行互换
  • n 读取匹配到的行的下一行至模式空间
  • N 追加匹配到的行的下一行至模式空间
  • d 删除模式空间中的行
  • D 删除多行模式空间中的所有行
高级编辑使用示例
sed -n 'n;p' FILE:显示偶数行
sed '1!G;h;$!d' FILE:逆向显示文件内容
sed '$!N;$!D' FILE:取出文件后两行
sed '$!d' FILE:取出文件最后一行
sed 'G' FILE:在每一行后添加一行空白行
sed '/^$/d;G' FILE:把多个空白行合并成一行
sed 'n;d' FILE: 显示奇数行;
sed -n '1!G;h;$p' FILE: 逆向显示文件中的每一行




原文地址:https://www.cnblogs.com/hemingyuan/p/7914438.html