linux 文本处理三剑客


目录

  • grep
  • sed
  • awk

grep 是文本搜索工具,能根据正则表达式匹配到文本相应的行

格式:

grep [选项] 表达式 [要匹配的文件]

常见选项:

-color=auto  对匹配到的文本着色显示
-m #         匹配#次后停止
-v           显示不被pattern匹配到的行,即取反
-i           忽略字符大小写
-n           显示匹配的行号
-c           统计匹配的行数
-o           仅显示匹配到的字符串
-q           静默模式,不输出任何信息
-A #         after, 后#行
-B #         before, 前#行
-C #         context, 前后各#行
-e           实现多个选项间的逻辑or关系,如:grep –e ‘cat ' -e ‘dog' file
-w           匹配整个单词
-E           使用ERE,相当于egrep
-F           不支持正则表达式,相当于fgrep
-f file      根据模式文件处理
-r           递归目录,但不处理软链接
-R           递归目录,但处理软链接

sed行编辑器,从文件或管道中读取一行,处理一行,接着处理下一行。这样一行一行的处理整个文件的内容。

格式:

sed [选项] {sed脚本} [文件]

 sed 常用选项

-n      不输出模式空间内容到屏幕,即不自动打印
-e      多点编辑
-f FILE 从指定文件中读取编辑脚本
-r, -E  使用扩展正则表达式
-i.bak  备份文件并原处编辑
-s      将多个文件视为独立文件,而不是单个连续的长文件流

#说明:
-ir 不支持 -i -r 支持 -ri 支持 -ni 会清空文件

 sed脚本---表示地址

1. 不给地址:对全文进行处理
2. 单地址:
    #:指定的行,$:最后一行
    /pattern/:被此处模式所能够匹配到的每一行
3. 地址范围:
    #,#                # 从#行到第#行,36 从第3行到第6行
    #,+#               # 从#行到+#行,3,+4 表示从3行到第7行
    /pat1/,/pat2/      # 从字符串pat1的行,到字符串pat2的行的内容
    #,/pat/
    /pat/,#
4. 步进:~
    1~2 奇数行
    2~2 偶数行

 sed 脚本---命令

p             打印当前模式空间内容,追加到默认输出之后
Ip            忽略大小写输出
d             删除模式空间匹配的行,并立即启用下一轮循环
a [\]text     在指定行后面追加文本,支持使用\n实现多行追加
i [\]text     在行前面插入文本
c [\]text     替换行为单行或多行文本
w file        保存模式匹配的行至指定文件
r file        读取指定文件的文本至模式空间中匹配到的行后
=             为模式空间中的行打印行号
!             模式空间中匹配行取反处理
q             结束或退出sed

 sed 查找和替换

s/pattern/string/修饰符     查找替换,支持使用其它分隔符,可以是其它形式:s@@@,s###替换修饰符:
g              行内全局替换
p              显示替换成功的行
w /PATH/FILE   将替换成功的行保存至文件中
I,i            忽略大小写

 sed使用实例