Linux三剑客命令—sed

编程

一、概念说明

官方概念说明:

stream editor for filtering and transforming text

字符流过滤编辑和文本字符流转换工具

Linux sed 命令是利用脚本来处理文本文件。

sed 可依照脚本的指令来处理、编辑文本文件。

Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。

二、sed功能作用说明

  • 处理文件信息

    • 文本文件信息(小文件)
    • 日志文件信息
    • 配置文件信息

  • 处理文件方式

    • 增加信息
    • 删除信息
    • 修改信息
    • 查找信息

三、sed语法原理

3.1 命令语法格式

标准格式:

sed [选项] [sed指令] [文件信息]

sed [参数] "处理规则" [操作对象]

...

相关参数

参数说明

-e

允许多项编辑

-n

取消默认输出

-i

就地编辑

-r

支持拓展正则

-f

指定sed匹配规则脚本

举例说明:

sed -i "s#oldboy#oldgirl#g" oldboy.txt

命令参数: -i

命令指令: s

指令修饰: g

相同指令信息只能使用一次,想使用多次需要加上分号

sed四种定位模式如下:

1、数字定位法

eg:指定行号

sed "3d" [文件信息]

sed "2,3d" [文件信息]

2、正则定位法

eg:指定正则定位

sed "/^g/d" [文件信息]

3、数字和正则定位法

sed "3,/^g/d" [文件信息]

4、正则和正则定位法

sed "/^g/,/^j/d" [文件信息]

sed的编辑模式指令汇总如下:

d :删除

p :打印

a : 在当前行后添加一行或多行

sed "2axxx" [文件信息]

c :用新文本修改(替换)当前行

sed "2cxxx" [文件信息]

i : 在当前行之前,插入文本(单独使用时)

sed "2ixxx" [文件信息]

r : 在文件中读内容

sed "2r r.txt" [文件信息]

w : 将指定行写入文件

sed "2w w.txt" [文件信息]

y : 将字符转换成另一个字符

sed "2y/fa/FA/" [文件信息]

s : 将字符串转换成另一个字符串(每一行只替换一次)

sed "s/11/22/" [文件信息]

g : 全部执行

sed "s/11/22/g" [文件信息]

i : 忽略大小写(跟 s 模式一起使用时)

& :代表前面匹配到的内容

3.2 命令执行过程

四、sed实践操作

4.1 实践环境搭建

cat >person.txt<<EOF

101,oldboy,CEO

102,zhaoyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

EOF

4.2 命令操作实践

  1. 查询实践

    • 单行查找

      打印模式空间内容:p

      取消默认输出信息:-n

      最终命令执行信息:

      按照行号查找: sed -n "1p" person.txt

      按照信息查找: sed -n "/oldboy/p" person.txt

    • 多行查找

      按照连续的多行查找:

      按照行号查找: sed -n "1,3p" person.txt

      按照信息查找: sed -n "/oldboy/,/yy/p" person.txt

      按照不连续的多行查找:

      按照行号查找: sed -n "1p;3p" person.txt

      按照信息查找:

      sed -nr "/101|103|104/p" person.txt

      sed -n "/101/p;/104/p" person.txt

  2. 增加实践

    • 按照行号增加

      文件追加信息指令(行后): a---append

      文件插入信息指令(行前): i---insert

      最终命令执行信息:

      sed "$a106

      107" person.txt

      sed "2a106

      107" person.txt

    • 按照信息增加

      sed "/oldboy/a106

      107" person.txt

  3. 删除实践

    • 单行删除

      删除文件信息指令: d---delete

      i---input

      sed -i.bak:-i参数必须写在所有参数最后面

      最终命令执行信息:

      按照行号删除: sed "1d" person.txt

      按照信息删除: sed "/oldboy/d" person.txt

      删除文件空行信息:

      sed "/^$/d" person.txt

      sed -n "/^$/!p" person.txt

    • 多行删除

      按照行号删除: sed "1,3d" person.txt

      按照信息删除: sed "/oldboy/,/yy/d" person.txt

  4. 替换实践

    • 文本替换

      编辑文件信息参数: i

      替换文件信息指令: s c

      按行进行信息替换: g (否则只替换每行匹配的第一个信息)

      最终命令执行信息:

      替换文件信息: sed -i.bak "s#oldboy#oldgirl#g" person.txt

    • 反向引用

      扩展正则识别参数: -r

      调用正则匹配信息: &

      最终命令执行信息:

      替换文件信息:

      sed -r "s#(.*)#<1>#g" person.txt

      sed -r "s#.*#<&>#g" person.txt

      echo 123456|sed -r "s#[1-6]{1}#<&>#g"

      echo 123456|sed -r "s#.#<&>#g"

    • 相关案例

      1、将nginx.conf中的注释行全部去掉

      [root@localhost ~]# sed "/^ *#/d" /etc/nginx/nginx.conf

      2、将nginx.conf中每一行之前增加注释

      [root@localhost ~]# sed "s/.*/# &/g" /etc/nginx/nginx.conf

      3、要求一键修改本机的ip,

      192.168.15.100 ---> 192.168.15.101

      172.16.1.100 ---> 172.16.1.101

      sed -i "s#.100#.101#g" /etc/sysconfig/network-scripts/ifcfg-eth[01]

      4、将/etc/passwd中的root修改成ROOT

      sed -i "s#root#ROOT#g" /etc/passwd

  5. 拓展实践

    修饰指定信息取反: sed -n "/^$/!p" person.txt

    取出文件行号信息: sed "=" person.txt

    执行多个相同指令: sed -n "1p;3p;5p" person.txt

以上是 Linux三剑客命令—sed 的全部内容, 来源链接: utcz.com/z/520123.html

回到顶部