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

linux中sed命令详解

sed 是 Linux 中的一个流编辑器(stream editor),主要用于处理文本的编辑和转换。它可以从文件或标准输入读取内容,然后根据指定的模式和指令对数据进行处理,最后输出修改后的结果。它的强大之处在于可以通过脚本或命令行进行非交互式的文本处理。

sed 的基本语法

sed [选项] '脚本' 文件

  • 脚本:描述如何编辑文本的操作。
  • 文件:需要处理的文本文件。
  • 选项:控制 sed 的行为,常用选项如下。

常用选项

  • -e:允许使用多个编辑脚本。
  • -i:直接修改文件(原地编辑)。
  • -n:静默模式,不会自动打印输出,通常与 p 命令结合使用。
  • -r:使用扩展正则表达式。
  • -f:从脚本文件读取 sed 命令。

常见命令

  • p:打印匹配的行。
  • d:删除匹配的行。
  • s:替换模式(substitute)。
  • a:在当前行之后追加文本。
  • i:在当前行之前插入文本。
  • c:用新的文本替换整行。

示例详解

1. 基本替换
sed 's/old/new/' file.txt
  • s/old/new/:将每行中第一个匹配 old 的字符串替换为 new
  • 如果需要替换每行中所有匹配的字符串,可以使用 g 选项:
sed 's/old/new/g' file.txt
2. 只修改特定行
sed '2s/old/new/' file.txt
  • 只对文件的第二行进行替换操作。
3. 删除行
sed '2d' file.txt
  • 删除第二行。
sed '2,5d' file.txt
  • 删除第 2 到第 5 行。
4. 插入和追加
sed '2a\This is new line' file.txt
  • 在第二行后插入文本 This is new line
sed '2i\This is new line' file.txt
  • 在第二行前插入文本 This is new line
5. 多脚本处理

使用 -e 选项可以进行多个命令的组合:

sed -e 's/old/new/' -e '2d' file.txt
  • 首先将所有 old 替换为 new,然后删除第二行。
6. 扩展正则表达式

默认情况下,sed 使用基本正则表达式。要使用扩展正则表达式,可以加上 -r 选项:

sed -r 's/(foo|bar)/new/' file.txt
  • foobar 替换为 new
7. 原地修改文件
sed -i 's/old/new/g' file.txt
  • 直接修改 file.txt,不再输出到标准输出。
8. 打印匹配行

结合 -np 命令,只输出匹配的行:

sed -n '/pattern/p' file.txt
  • 只打印匹配 pattern 的行。

高级用法

1. 使用 & 引用匹配部分

在替换操作中,& 代表匹配的部分:

sed 's/[0-9]\+/[&]/g' file.txt
  • 将文件中所有的数字用方括号包裹起来。
2. 使用标记捕获组
sed 's/\(old\)/new\1/' file.txt
  • 将匹配的 old 替换为 newold\1 表示引用第一个捕获组。
3. 替换多行文本
sed ':a;N;$!ba;s/\n/ /g' file.txt
  • 将整个文件的所有换行符替换为空格,从而将整个文件内容变成一行。

总结

sed 是处理文本的强大工具,适用于各种文本处理任务。通过合理利用正则表达式、脚本和命令选项,可以实现从简单的查找替换到复杂的文本编辑任务。

http://www.lryc.cn/news/457069.html

相关文章:

  • vue 模板语法
  • bladex漏洞思路总结
  • 解决SqlServer自增主键使用MybatisPlus批量插入报错问题
  • leetcode:反转字符串中的单词III
  • 深度学习常见问题
  • 神经网络的一些benchmark示例
  • 如何进行统级架构设计
  • 鼓组编写:SsdSample鼓映射 GM Map 自动保存 互换midi位置 风格模板 逻辑编辑器
  • 使用YOLOv11进行视频目标检测
  • DEEP和DeepBook V3将于10月14日推出
  • 学习之高阶编程列表推导式,字典推导式
  • QT实现QInputDialog中文按钮
  • Redis 常用指令技术解读
  • Web前端入门
  • 贝塞尔曲线详细讲解,如何用 Canvas 绘制三阶贝塞尔曲线?
  • Ubuntu20.04卸载ros2 foxy版本安装ros1 noetic版本
  • PicGo+Gitee搭建Typora图床
  • MySQL 脱敏函数使用详解:保护数据隐私的关键手段
  • nginx之virtual host
  • Windows 下纯手工打造 QT 开发环境
  • k8s的安装和部署
  • 第十八篇:一文说清楚ICMP的底层原理
  • 【优选算法】(第三十二篇)
  • 线程(四)线程的同步——条件变量
  • 二维数组的旋转与翻转(C++)(上(这只是简单讲解))
  • 【在Linux世界中追寻伟大的One Piece】System V共享内存
  • 【大数据】Spark弹性分布式数据集RDD详细说明
  • 人参玉桂膏简介
  • 消费者Rebalance机制
  • 消息队列介绍