文本处理三剑客之sed

sed 用法

sed [option]... 'script' inputfile ... 

常用选项

  • -n  关闭自动打印
  • -e 多点编辑
  • -f  /PATH/SCRIPT 从指定文件中读取编辑脚本
  • -r 支持使用扩展表达式
  • -i.bak 备份文件并原处编辑

script 

   地址命令

地址定界

(1)不给地址:对全文进行处理

(2)单地址:

  •       #:指定的行,$: 最后一行
  •      /pattern/: 被此处模式所能够匹配到的每一行

(3)地址范围:

  •     #,#   第几行到第几行
  •    #,+#   第几行到后面的几行
  •    /pat1/, /pat2/  正则表达式,可以搜索日志中几点几分到几点几分的日志内容
    • 例如 sed -n '/^2020-02-29 03:23:34 /,/^2020-02-29 04:13:24/'  xxx.log  举例就不一而足了
  •    #,/pat1/

 (4)~:步进

  • 1~2 奇数行 步进2
  • 2~2偶数行  步进2

      想不起来这个命令的适用场景,后面再补充吧

编辑命令

  • d        删除模式空间匹配的行,并立即启用下一轮循环
  • p       打印当前模式空间内容,并追加到默认输出之后
  • a[\]text 在指定行后面追加文本,支持使用\n实现多行追加
  • i[\]text 在行前面插入文本
  • c[\]text 替换行为单行或多行文本
  • w /path/file 保存模式匹配的行至指定文件
  • r /path/file 读取指定文件的文本至模式空间中匹配到的行后
  • =     为模式空间中的行打印行号
  • !     模式空间中匹配行取反处理
  • s///   查找替换,支持使用其它分隔符,s@@@, s###替换标记
  • ——替换标记
    • g  行内全局替换
    • p 显示替换成功的行
    • w /PATH/FILE

sed 示例  注意直接粘贴在shell窗口上会无法执行,是因为空格字符的问题

  • cp /etc/passed passwd
  • sed  '2p' passwd  打印第二行,并且全部打印
  • sed  -n '2p' passwd 只打印第二行
  • sed  -n '1,4p' passwd 打印1-4行
  • sed  -n '/root/p' passwd 打印包含root的行
  • sed  -n '2,/root/p' passwd  从第二行开始,打印包含root的行
  • sed  -n '/^$/=' passwd  显示空行行号,ps (=     为模式空间中的行打印行号)
  • sed 'root/a\superman' passwd  行后
  • sed 'root/i\superman' passwd  行前
  • sed 'root/c\superman' passwd  代替行
  • sed '/^$/d' file  删除空格行
  • sed '1,10d' file 删除1-10行
  • nl  passwd|sed '2,5d'  删除2-5行
  • nl  passwd|sed '2a tea'   在第二行新增一个tea(茶叶单词)
  • sed 's/test/mytest/g' file 全局替换 test -> mytest
  • sed -e 's/test/mytest/'  's/dog/cat/ ' pets   多点编辑
  • sed -i.bak 's/test/mytest/g' file  替换前先生成一个备份文件file.bak

参考:http://www.gnu.org/software/sed/manual/html_node/Overview.html#Overview

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章