当前位置: 首页 > news >正文

Shell编程基础(十五)文本三剑客(sed)

文本三剑客(sed)

    • 使用场景
    • 基本语法
    • 实例
      • 命令列表

使用场景

sed提供了一种面交互的方式修改文件内容。
它是一行一行处理,可以通过正则匹配要修改的部分

基本语法

  • 基本语法
    sed [-opt] command files(多个文件 空格隔开)

  • sed 使用正则
    sed -r “正则匹配数据行/指定行号 sed命令” files

  • sed 修改内容写回文件
    默认,sed操作完的数据会显示在控制台,而不会回写到文件中; 若要将变更保存到文件可以使用 -i 选项

    sed -ri “/正则表达式/或者指定行号 + [{]sed命令[}]” files
    sed 命令可以使用 {} 括起来,也可以不写,写了意思更明确。类似$var 和 ${var}

如果要对选中的行执行多个操作可以使用 分号(;) 隔开 sed命令

sed -r "\regex expression\{s;r}" file
  • 行号表示法匹配多行使用逗号分割两个行号($ 表示最后一行
# 删除 1 到 2 行
sed -r "1,2{d}" file 

实例

命令列表

  • d 删除匹配的行
    // 删除正则匹配的行
    sed -r “/正则表达式/{d}” file
    // 删除指定行
    sed -r “行号{d}” file
    • 按正则表达式删除
    sed -r "/regex expression/d" file
    
    • 删除第二行
    sed -r "2d" file
    
    • 删除 2-5行
    sed "2,5{d}" file
    
    • 删除5行到最后一行
    sed -r "5,$d" file
    
    • 删除最后一行
    sed -r "$d" file
    
  • s 替换匹配上的字符
    sed -r “s/正则查找的内容/要替换的内容/” file
    也可以使用 # 分割,当要替换的内容中有/或其他特殊含义字符时可以使用#,或者使用转义
    sed -r “s#正则查找的内容#要替换的内容#” file

默认,只会替换每一行中的第一个匹配上的字符串;如果要全部替换,需要在最后的 / 后加个g,代表行内匹配上的字符串都替换
```bash
# 将含有 abc 的行 的第一个 abc 换成 def
sed -r “s/abc/def/” file

# 将含有 abc的行 的所有 abc 都换成 def
sed -r "s/abc/def/g" file
````
sed 的 s 命令中,如果要**引用查找到的字符串**可以使用() + \1 或 & 获取
和 vim 中 类似。
  • r 读取文件,写入到sed指定的文件
    读取一个文件的内容,默认会追加到 sed指定的文件中的每一行下面。
    如果要追加在目标文件的指定行的下面,
    可以在 r前面加上行号同样,这里可以使用$表示最后一行
    还可以使用正则匹配行,在匹配上的每一行下面都会追加读取到的内容,注意正则表达式使用 / / 分割
# 取sourcefile的内容, 追加到 destfile每一行后面
sed -r 'r sourcefile' destfile# 读取sourcefile的内容, 追加到 destfile最后一行后面
sed -r '$r sourcefile' destfile# 读取sourcefile的内容, 追加到 destfile第一行后面
sed -r '1r sourcefile' destfile# 读取sourcefile的内容, 追加到 正则表达式匹配上的每一行后面
sed -r '/正则表达式/r sourcefile' destfile
  • w 写入文件,读取sed指定文件的内容写入另一个文件
    将 sed指定的文件 sourcefile,另存为另一个文件 destfile
    同样可以使用 行号或者 正则,选中想要保存的部分行,这样就是匹配上的行保存到目标文件中。
# 将 整个sourcefile文件内容写入 destfile
sed -r 'w destfile' sourcefile# 将sourcefile文件 指定行写入 destfile
sed -r '1w destfile' sourcefile# 将sourcefile文件 指定范围行写入 destfile
sed -r '1,5w destfile' sourcefile# 将sourcefile文件 正则匹配上的行 写入 destfile
sed -r '/正则表达式/w destfile' sourcefile
  • a 追加内容,在匹配行下面写入数据
    和上面一样,可以使用固定行号,范围行号以及正则表达式匹配要追加的行,不限制时,应用到每一行。
    追加多行可以使用 \n 转义实现
# 给file文件每一行下面添加一行 123 
sed -r 'a 123' file每一行下面追加两行123
sed -r 'a 123\n123' file
  • i 插入内容,在匹配行上面写入数据
    规则与上面 a 类似,只是内容写到匹配行的上面

  • c 替换匹配上的整行内容
    规则与上面a 类似,对匹配上的行,整行替换

# 第一行替换为 123
sed -r '1c 123' file# 第一行到第二行替换为 123
sed -r '1,2c 123' file# 匹配上正则的行 替换为 123
sed -r '/正则表达式/c 123' file
  • n 匹配当前行,组合其他sed命令作用到下一行
    需与其他命令结合使用,n命令仅仅用于查找,组合的其他命令才是作用到下一行的命令
# 删除第二行
sed -r '1n;d' file
  • ! 反选;对匹配的结果取反,然后应用后面的sed命令
# 删掉 除了第一行的其他行
sed -r '1! d' file# 删掉 正则 不 匹配的行
sed -r '/正则表达式/! d' file
  • e 多次编辑,
    正常sed 只能应用依次编辑
    类似
sed -r '1 d' file

如果想一个命令执行多个独立的编辑操作,可以使用-e

# 删除第一行 & 第二行的aa换成bb
sed -r -e '1 d'  -e '2 s/aa/bb/' file

当然,也可以使用分号(;)隔离多个独立的 查找应用 命令

# 删除第一行 & 第二行的aa换成bb
sed -r  '1 d;2 s/aa/bb/' file

如果是对同一行执行多个操作可以使用分号(;)隔离多个sed 应用命令

# 第二行的 aa换成bb & 第二行的 cc换成dd
sed -r  '2 {s/aa/bb/;s/cc/dd/}' file
http://www.lryc.cn/news/115280.html

相关文章:

  • 5,二叉树【p6-p7】
  • 【Spring】如果你需要使用重试机制,请使用Spring官方的Spring Retry
  • pagehelper 优化自定义分页和排序位置
  • Linux下查询文件夹中文件数量的方法
  • PS透明屏,在科技展示中,有哪些优点展示?
  • Hbase-面试题
  • 图的宽度优先深度优先遍历
  • redis Set类型命令
  • Netty框架自带类DefaultEventExecutorGroup的作用,用来做业务的并发
  • TCP的四次挥手与TCP状态转换
  • 【网络编程】实现一个简单多线程版本TCP服务器(附源码)
  • centos离线部署docker
  • ffmpeg使用滤镜对视频进行处理播放
  • Ansible Handlers模块详解,深入理解Ansible Handlers 自动化中的关键组件
  • threejs点击模型实现模型边缘高亮的选中效果--更改后提高帧率
  • RocketMQ 主备自动切换模式部署
  • 【MySQL】select相关
  • 在Python中应用RSA算法实现图像加密:基于Jupyter环境的详细步骤和示例代码
  • Prometheus Blackbox Exporter 的 HTTP 探测指标中各个阶段的时间统计信息
  • 数据结构之时间复杂度-空间复杂度
  • 新一代构建工具 maven-mvnd
  • 构建Docker容器监控系统(2)(Cadvisor +Prometheus+Grafana)
  • Leetcode.995 K 连续位的最小翻转次数
  • PHP8的跳转语句-PHP8知识详解
  • Idea中maven无法下载源码
  • 【linux-keepalive】keepalive避免单点故障,高可用配置
  • 测试网络模型的FLOPs和params
  • 《树莓派项目实战》第十五节 使用L298N驱动板模块驱动双极42步进电机
  • 基于短信宝API零代码实现短信自动化业务
  • Qt应用开发(基础篇)——信号槽 Signals and Slots