文档章节

sed 命令

俊赛潘安-才比管乐
 俊赛潘安-才比管乐
发布于 07/11 11:50
字数 1053
阅读 12
收藏 0

流程

  • 每次从输入中读取一行
  • 匹配数据
  • 修改数据
  • 输出数据(默认 stdout)

选项

  • -e 执行多个编辑命令
    sed -e 's/root/ROOT/g; s/bin/BIN/g' /etc/passwd
    sed -e 's/root/ROOT/g' -e 's/bin/BIN/g' /etc/passwd
    
  • -f 从指定文件中获取 sed 命令
    cat > script.sed <<EOF
    s/root/ROOT/
    s/bin/BIN/
    s/home/HOME/
    EOF
    sed -f script.sed /etc/passwd
    
  • -n 不输出数据(只是编辑器不输出,与编辑命令无关)
  • -i 直接修改文件本身
  • -r 扩展正则表达式,不需要繁琐的转义

命令

命令 描述
s 替换文本
d 删除行
i 匹配行上插入新行
a 匹配行下插入新行
c 匹配行替换
y 逐个字符替换文本
p 打印行
= 打印行号
w 写入指定文件
r 读出指定文件

高级命令

命令 描述
x 交换模式空间与保持空间内容
d 删除当前模式空间内容,并进入下一个循环
D 删除多行模式空间中的首行,并进入下一个循环
n 读取匹配到的下一行至模式空间 [会覆盖模式空间原有的值]
N 读取匹配到的下一行至模式空间 [追加到原有内容后]
h 复制模式空间内容,到保持空间, 覆盖
H 复制模式空间内容,到保持空间, 追加
g 复制保持空间内容,到模式空间, 覆盖
G 复制保持空间内容,到模式空间, 追加
  • 模式空间(pattern space): 所有的处理动作都在这里,默认打印到终端
  • 保持空间(hold space): 数据暂存区域,类似中间变量
  • 循环标签
    • 格式: sed -n ':标签名 范围1 命令1; /模式/b 标签名' filename
    • 调用: b, t, T

使用

  • 默认只替换在每行第一次出现目标文本
    sed 's/root/ROOT/' /etc/passwd
    
  • 数字替换标记,替换每行的第二个 root 为 ROOT
    sed 's/root/ROOT/2' /etc/passwd
    
  • g 替换标记,替换所有匹配的 root 为 ROOT
    sed 's/root/ROOT/g' /etc/passwd
    
  • 替换每行第二次开始及之后的 root 为 ROOT
    sed 's/root/ROOT/2g' /etc/passwd
    
  • 打印被替换过的行
    sed -n 's/root/ROOT/gp' /etc/passwd
    
  • 把被替换过的行写入 change.txt 中
    sed -n 's/root/ROOT/g w change.txt' /etc/passwd
    
  • 将第3行中所有的 bin 替换成 BIN
    sed '3 s/bin/BIN/g' /etc/passwd
    
  • 将第2到5行中所有的 bin 替换成 BIN
    sed '2,5 s/bin/BIN/g' /etc/passwd
    
  • 将第10行到最后一行中所有的 bin 替换成 BIN
    sed '10,$ s/bin/BIN/g' /etc/passwd
    
  • 寻找包含有字符串 root 的行,并将匹配行的 bin 替换为 BIN
    sed -n '/root/s/bin/BIN/p' /etc/passwd
    
  • 从匹配 root 的行开始替换 bin 为 BIN,直到匹配 nologin 的行,循环
    sed -n '/root/,/nologin/s/bin/BIN/p' /etc/passwd
    
  • 删除匹配 root 的行
    sed '/root/d' /etc/passwd
    
  • 删除第2到最后一行
    sed '2,$d' /etc/passwd
    
  • 删除匹配 root 行及其下面两行
    sed '/root/,+2d' /etc/passwd
    
  • 保留第四、五、六三行,其他行删除
    sed '4,6!d' /etc/passwd
    
  • 每一行前面增加一个行 AAAA
    sed 'iAAAA' /etc/passwd
    
  • 第一行前面增加一个行 AAAA
    sed '1iAAAA' /etc/passwd
    
  • 第三行后面增加一个行 AAAA
    sed '3aAAAA' /etc/passwd
    
  • 最后一行后面增加一个行 AAAA
    sed '$aAAAA' /etc/passwd
    
  • 逐个字符替换
    echo abcdefggfedcba | sed 'y/acg/ACG/'
    # 输出 AbCdefGGfedCbA
    
  • 把第1行到第4行写入 test.txt
    sed '1,4w test.txt' /etc/passwd
    
  • 把 test.txt 的内容插入第三行后
    sed '3r test.txt' /etc/passwd
    
  • 把 000_00000000 换成 000.00000000
    sed -i 's/\([0-9]\{3\}\)_\([0-9]\{8\}\)/\1.\2/g' phone_file
    # 或者
    sed -i -r 's/([0-9]{3})_([0-9]{8})/\1.\2/g' phone_file
    
  • 替换 root 为 (root)
    sed -i 's/root/(&)/g' file_name
    
  • 把匹配 AAAA 行下的第二行中的 BBBB 改成 CCCC
    sed -i '/AAAA/{n;n;s/BBBB/CCCC/g}' file_name
    
  • 在匹配 AAAA 行下的第三行下添加 CCCC 一行
    sed -i '/AAAA/{n;n;n;s/$/\nCCCC/}' file_name
    

© 著作权归作者所有

俊赛潘安-才比管乐

俊赛潘安-才比管乐

粉丝 36
博文 97
码字总数 67445
作品 0
海淀
系统管理员
私信 提问
Shell正则四剑客 | sed命令

sed简介 sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲...

寰宇01
2018/10/28
38
0
linux sed 批量替换字符串

比如,要将目录/modules下面所有文件中的zhangsan都修改成lisi,这样做: sed -i "s/zhangsan/lisi/g" 解释一下: -i 表示inplace edit,就地修改文件 -r 表示搜索子目录 -l 表示输出匹配的文...

走下哦
2018/07/01
0
0
linux sed 命令单行任务快速参考

文本间隔: ——– # 在每一行后面增加一空行 sed G # 将原来的所有空行删除并在每一行后面增加一空行。 # 这样在输出的文本中每一行后面将有且只有一空行。 sed ‘/^$/d;G’ # 在每一行后面...

程序师
2018/07/30
0
0
linux shell学习笔记

sed 非交互式文本编辑器 1、命令行调用 sed [option] 'sed命令' file 2、sed命令调用sed脚本 sed [option] -f sed脚本文件 file 3、sed脚本 此脚本必须以#!开头 使用方式./脚本文件 输入文件...

玩代码的小坏孩
2015/01/04
94
0
转:通用线程 -- sed 实例,第 1 部分

挑选编辑器 在 UNIX 世界中有很多文本编辑器可供我们选择。思考一下 -- vi、emacs 和 jed 以及很多其它工具都会浮现在脑海中。我们都有自己已逐渐了解并且喜爱的编辑器(以及我们喜爱的组合键...

范堡
2009/05/06
216
0

没有更多内容

加载失败,请刷新页面

加载更多

北漂的生活成本到底有多大?聊一聊我最真实的感受

北京的生活成本是不是很大?这是很多朋友心中的困惑,有很多我身边的朋友在没毕业之前就觉得北京的生活成本很大,在找工作的时候直接放弃了找北京工作的打算,目标定向了成都、杭州、西安等这...

gzc426
5分钟前
2
0
Hystrix 分布式系统限流、降级、熔断框架

为什么需要Hystrix 在大中型分布式系统中,通常系统很多依赖,如下图: 在高并发访问下,这些依赖的稳定性与否对系统的影响非常大,但是依赖有很多不可控问题:如网络连接缓慢,资源繁忙,暂时...

Java架构师ya七
25分钟前
2
0
YUM仓库配置及命令详解

导读 通过源代码编译的方式安装程序在灵活性、可定制性方面具有无可比拟的优势,但也正因为这种特性给管理员带来了额外的维护开销,当应用在大规模的服务器群集时存在一定的局限性。那么就需...

问题终结者
46分钟前
11
0
docker初学者

docker简介 在真正使用这项技术之前很难深刻的理解它的概念。 从简单的方面来说,docker就是一个轻量级的虚拟机。接下去的学习首先不妨抱着这个想法来看,让后慢慢寻找差别,最终我们会回来试...

街角的小丑
今天
15
0
了解下Hz单位的意思

今天看到计组的突然看到Hz这个单位,突然不知道它是啥意思,就百度了解啦下。 赫,是频率的基本单位,为纪念验证电磁波存在的德国物理学家海因里希·鲁道夫·赫兹(Heinrich Rudolf Hertz)而...

南桥北木
今天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部