sed 笔记

sed是一个非交互式文本编辑器,他可以对文本文件和标准输入进行编辑,标准输入可以是来自键盘,文件重定向,字符串,变量甚至来自于管道的文本。sed适用于以下三种场合:

  • 编辑相对交互式文本编辑器而言太大的文件。
  • 编辑命令太复杂,在交互式文本编辑器中难以输入的情况。
  • 对文件扫描一遍,但是需要执行多个编辑函数的情况

调用sed有三种方式,一种为she'll命令行方式,另外两种是将sed命令写入脚本,然后执行该脚本文件。三种方式归纳如下:

  • shell命令行输入命令调用sed,格式为:
  1. sed [选项] 'sed命令' 输入文件
  • 将sed命令插入脚本文件后,通过sed命令调用它,格式为:
  • sed [选项] -f sed脚本文件 输入文件
  • 将sed命令插入脚本后,最常用的方法是将该脚本设置为可执行文件,然后直接执行该脚本,格式为:
  1. ./sed脚本文件 输入文件

sed命令选项及意义:

选项 意义
-n 不打印所有行到标准输出
-e 表示将下一个字符串解析为sed编辑命令,如果只传递一个编辑命令给sed,-e选项可以省略
-f 表示正在调用sed脚本文件

sed通常由定位文本行和sed编辑命令两部分组成,sed提供以下两种方式定位文本:

  1. 使用行号,指定一行或者行号范围
  2. 使用正则表达式

下表是sed定位文本的方法

选项 意义
x x为指定行号
x,y 指定从x到y的行号范围
/patten/ 查询包含模式的行
/pattern/pattern/ 查询包含两个模式的行
/pattern/,x 从与pattern匹配的行到x行号之间的行
x,/pattern/ 从x号行到与pattern匹配行之间的行
x,y! 查询不包括x,y行号的行

下面将在示例中说明sed的命令选项的意义,新建一个名为sedtest的文件,内容如下:(测试过程中可能会有修改)

this is a test file for sed
Test is real important
what i want to say is: haha nobody is god except allah.
This is very IMPORTYANT what you want to say is:goodbye! where to go? I don't know! this cool!
  •  -n选项
#第一条命令,带-n选项,只打印第一行
[root@linuxTest ~]# sed -n '1p' sedtest 
this is a test file for sed
#第二条命令,不带-n,不仅打印第一行,还打印输入文件的全部内容
[root@linuxTest ~]# sed '1p' sedtest 
this is a test file for sed
this is a test file for sed
Test is real important
what i want to say is: haha
nobody is god except allah.
This is very IMPORTYANT

  #打印行范围

  root@linuxTest ~]# sed -n '2,6p' sedtest
  Test is real important
  what i want to say is: haha


  nobody is god except allah.
  This is very IMPORTYANT

 
  • -e选项
#sed编辑命令“=”用来匹配is关键字的行号,如果希望行号和行内容都打印出来,则需要传递p和=两个编辑命令
[root@linuxTest ~]# sed -n -e '/is/=' -e '/is/p' sedtest 
1
this is a test file for sed
2
Test is real important
3
what i want to say is: haha
5

-s选项

#使用替换模式替换相应模式
#p选项,只替换每行第一个符合条件的文本
[root@linuxTest ~]# sed -n 's/is/IS/p' sedtest 
thIS is a test file for sed
Test IS real important
what i want to say IS: haha
nobody IS god except allah.
ThIS is very IMPORTYANT
what you want to say IS:goodbye!
thIS cool!
#2p,如果每行含有两个及两个以上目标文本,则只替换每行第二个符合条件的文本
[root@linuxTest ~]# sed -n 's/is/IS/2p' sedtest 
this IS a test file for sed
This IS very IMPORTYANT
#pg,如果该行中含有目标文本,则不论几个都替换。
[root@linuxTest ~]# sed -n 's/is/IS/pg' sedtest 
thIS IS a test file for sed
Test IS real important
what i want to say IS: haha
nobody IS god except allah.
ThIS IS very IMPORTYANT
what you want to say IS:goodbye!
thIS cool!
#w,替换后,保存文本到另外一个文件
[root@linuxTest ~]# sed -n 's/is/IS/gw output' sedtest 
原文地址:https://www.cnblogs.com/nurruden/p/6381915.html