sed命令学习笔记

sed是一个非交互式的文本编辑器,sed一般适用于三种场合:

  • 编辑相对于交互式文本编辑器而言太大的文件
  • 编辑命令太复杂,在交互式式编辑器中难于输入的情况
  • 需要对文件一次执行多个动作的情况

sed只是对缓冲区内副本进行编辑,因此在编辑完文件后要记得输出重定向到另一个文件

sed -option  ‘‘编辑命令’ input-file > result-file

sed命令一般有三种用法:

  • sed -option ‘编辑命令’ input-file
  • sed -option -f 脚本文件 input-file
  • 将命令插入脚本并设置为可执行文件,./脚本文件 input-file

 sed命令常用的命令选项(option):

  • -n  不打印所有行到标准输出(sed命令默认执行后打印所有行)通常与‘编辑命令p一起使用来打印特定行
  • -e  将下一个字符串解析为sed编辑命令,说白了就是 -e后面接编辑命令,这样就可以一条sed命令执行多个编辑命令了
  • -f  表示将调用sed脚本文件

sed命令定位文本的方法:

  • x                                                           指定行号
  • x,y                                                        指定行号范围
  • /pattern/                                              指定包含内容(pattern)的行
  • /pattern/,x                                           指定从/pattern/到x行之间的行
  • x,/pattern/                                        指定从x行到/pattern/之间的行
  • /pattern/,/pattern/                           指定从/pattern/到/pattern/之间的行
  • x,y!                                                       查询不包括x和y之间内容的行
  • 元字符$                                               表示最后一行
  • /pattern/模式匹配中"." "*" “^” “$”      表示匹配“任意一个字符”和“前一个字符重复任意次(包括零次)”和“行首”和“行尾”与正则表达式相同

Examples:

  • sed -n '1p' input.txt                                       表示只打印input.txt文件的第一行
  • sed '1p' input.txt                                            打印完第一行后会继续打印input.txt全文内容
  • sed -n '2,/hello/p' input.txt                            打印从第二行到包含hello的行之间的所有内容
  • sed -n '/hello/,/tt/p' input.txt                          表示   
  • sed -n -e '/hello/p' -e '/tt/p' input.txt             打印含hello和tt的行,先打印含hello的第一行在打印含tt的第一行,然后才是含hello的第二行
  • sed -n '/hello/,/hello/p' input.txt                   打印hello之间的行,若含有奇数个含hello的行会从第一个含hello的行打印到最后一行

sed编辑命令:

  • p                  打印匹配行
  • =                  打印匹配行号
  • a\                 在定位行号之后追加文本信息
  • i\                  在定位行号之前插入文本信息
  • d                  删除指定行
  • c\                 用新文本替换指定文本
  • s                  使用替换模式替换定位文本
  • r                   从另一个文件中读文本
  • w                 将文本写入一个文件
  • y                  变换字符
  • q                 第一个模式匹配完成后退出
  • l                  显示与八进制ASCII码等价的控制字符
  • { ;}           在定位行执行命令组
  • n                 读取下一个输出行,用下一个命令处理新的行    
  • h                 将模式缓冲区的文本复制到保持缓冲区
  • H                将模式缓冲区的文本追加到保持缓冲区
  • x                 互换模式缓冲区和保持缓冲区的内容
  • g                将保持缓冲区的内容复制到模式缓冲区
  • G               将保持缓冲区的内容追加到模式缓冲区

PS: 模式缓冲区(Pattern Buffer):即“我们要把缓冲区内容输出到目标文件”所提到的缓冲区

       保持缓冲区(Hold Buffer):      sed命令有两个独立的缓冲区,保持缓冲区与模式缓冲区相对应

Example:   sed -e '/hello/ h' -e ' /tt/H' -e '$G'   表示匹配到hello后复制保持缓冲区匹配到tt追加到保持缓冲区,执行到最后一行把保持缓冲区追加到模式缓冲区


常用命令:

  • 插入文本         sed '指定地址 i\ text' 输入文件                                                          在定位行号之前插一行
  • 修改文本         sed '指定地址 c\ text' 输入文件                                                         整行修改
  • 删除文本         sed '指定地址d' 输入文件                                                                  删除行
  • 替换文本         sed 's/被替换的字符串/新字符串/【编辑命令】' 输入文件           替换,默认打印所有内容,可通过-n ‘p'来打印指定行,“&”可代表被替换的字符串,非整行
  • 写入新文件     sed -n '指定地址 w 输出文件' 输入文件                                           写入新文件
  • 读入文本         sed '指定地址 r 被读取的文件名' 输入文件                                     类似与在指定地址后插入读入的文本         
  • 退出命令         sed '指定地址 q' 输入文件                                                                 常见打印前7行: sed '7q' input.txt
  • 变换命令         sed 'y/被替换的字符序列/替换的字符序列/' 输入文件                    单独替换字符而非整行,注意的是“序列”表示的意思是分别替换,y/12/ab/表示a替换1,b替换2
  • 执行命令组                举个例子    命令:sed -e '/yes/p' -e '/yes/=' input.txt            命令:sed '/yes/{p;=}' input.txt   这俩命令等价

sed脚本文件写法:


#!/bin/sed -f

s/yes/tt/

2,3p

给脚本文件加执行权限:

chmod u+x 文件名








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值