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

Linux sed 的多个用法

sed 是 Linux 和类 Unix 系统中非常强大的文本流编辑器,它可以对文本进行替换、删除、插入、查找等多种操作。下面列出了 sed 常见的多种用法。

1. 基本替换

最常见的 sed 用法是进行文本替换。它使用以下语法:

sed 's/old-text/new-text/' filename
  • s 表示替换操作。
  • old-text 是要被替换的文本。
  • new-text 是替换后的文本。

示例:将文件 file.txt 中的 apple 替换成 orange

sed 's/apple/orange/' file.txt

2. 全局替换

默认情况下,sed 只会替换每一行中的第一个匹配项。如果要替换每一行中的所有匹配项,可以使用 g 标志(代表 global):

sed 's/old-text/new-text/g' filename

示例:将 apple 替换为 orange,替换每一行中的所有 apple

sed 's/apple/orange/g' file.txt

3. 替换并输出到文件

默认情况下,sed 会将结果输出到标准输出(即终端)。如果要将修改后的内容直接写回文件,可以使用 -i(in-place)选项:

sed -i 's/old-text/new-text/g' filename

示例:将文件 file.txt 中所有的 apple 替换为 orange 并直接保存:

sed -i 's/apple/orange/g' file.txt
  • 如果要创建一个备份文件(比如以 .bak 为扩展名),可以加上一个备份扩展名:
    sed -i.bak 's/apple/orange/g' file.txt

    这将创建 file.txt.bak 作为备份,并在 file.txt 中进行替换。

4. 替换时使用正则表达式

sed 支持使用正则表达式(RE)来匹配和替换文本。您可以使用更复杂的模式进行替换。

示例:替换行首的 foobar

sed 's/^foo/bar/' file.txt

示例:替换行尾的 foobar

sed 's/foo$/bar/' file.txt

5. 删除行

sed 也可以删除文件中的行。要删除特定的行,可以使用 d 命令:

  • 删除第 3 行:

    sed '3d' file.txt
  • 删除包含特定文本的所有行:

    sed '/pattern/d' file.txt

    例如,删除包含 apple 的所有行:

    sed '/apple/d' file.txt
  • 删除范围内的行:

    sed '2,5d' file.txt

    这会删除第 2 行到第 5 行的所有内容。

6. 打印指定行

sed 默认会打印所有的行,但你也可以使用 p 命令仅打印特定的行。

  • 打印第 2 行:

    sed -n '2p' file.txt
  • 打印匹配某个模式的行:

    sed -n '/pattern/p' file.txt
  • 打印第 2 到第 5 行:

    sed -n '2,5p' file.txt

7. 替换并在替换文本中使用反向引用

使用反向引用可以在替换文本中使用匹配的模式。

示例:将匹配到的电话号码格式从 123-456-7890 转换为 123.456.7890

sed 's/\([0-9]\{3\}\)-\([0-9]\{3\}\)-\([0-9]\{4\}\)/\1.\2.\3/' file.txt
  • \([0-9]\{3\}\) 表示匹配 3 个数字,并将其捕获为一个组。
  • \1 表示引用第一个捕获组(即前三个数字)。

8. 多重命令

sed 支持在单个命令中执行多个操作,通过分号(;)分隔每个操作。

示例:删除第 3 行并替换第 2 行的 appleorange

sed '3d; 2s/apple/orange/' file.txt

如果要执行更多命令,可以使用 -e 选项:

sed -e '3d' -e '2s/apple/orange/' file.txt

9. 使用正则表达式替换并保存输出

使用 sed 的正则表达式替换功能时,您也可以利用捕获组(Parentheses)来处理更复杂的替换。

示例:将 abc123def 替换为 abc-123-def,需要在替换字符串中加入分隔符:

sed 's/\([a-z]*\)\([0-9]*\)\([a-z]*\)/\1-\2-\3/' file.txt

这会将文本格式 abc123def 转换为 abc-123-def

10. 行号修改

你可以使用 = 命令在输出中显示每一行的行号:

sed '=' file.txt

这将输出每一行前面带上行号。

11. 文本插入和追加

使用 sed 可以在特定位置插入或追加文本。

  • 在第 2 行之后插入文本:

    sed '2a\This is a new line.' file.txt
  • 在第 3 行之前插入文本:

    sed '3i\This is a new line.' file.txt

12. 替换带有多行的文本

sed 默认处理的是单行文本,但你可以使用 N 命令将多行内容合并到模式空间,从而进行跨行操作。

示例:将两个连续的行合并成一行:

sed 'N;s/\n/ /' file.txt

这会将每对连续行合并成一行,用空格分隔。


总结

sed 是非常灵活和强大的文本处理工具,可以进行文本替换、删除、插入、打印、合并等各种操作。常见的用法包括:

  • 基本替换和全局替换
  • 删除行和打印行
  • 使用正则表达式进行复杂匹配
  • 修改文件内容并保存
  • 插入和追加文本
  • 使用反向引用和捕获组

通过熟练掌握这些基本用法,可以大大提高文本处理的效率。


http://www.kler.cn/a/394613.html

相关文章:

  • 苦等三年!金克斯大人回来了!
  • 研究生如何远控实验室电脑?远程办公功能使用教程
  • LabVIEW大数据处理
  • 如何判定linux系统CPU的核心架构
  • Flink1.19编译并Standalone模式本地运行
  • C获取程序名称的方法
  • 微信小程序 — 农产品供销系统
  • 无人机应用场景:石油管道巡检技术详解
  • 经典文献阅读之--DROID-SLAM(完美的深度学习slam框架)
  • 使用Java爬虫获取商品订单详情:从API到数据存储
  • STM32完全学习——系统时钟设置
  • 从华为到创业公司
  • 蓝桥杯竞赛单片机组备赛【经验帖】
  • 【计算机网络】五层对比,物理设备对比
  • 阿里巴巴首推Chinese SimpleQA,全方位检验大型语言模型在中文事实性问答上的表现
  • Mac中安装OhMyZsh
  • 构建安全的数据库环境:群晖NAS安装MySQL和phpMyAdmin详细步骤
  • Qt 之 qwt和QCustomplot对比
  • javascript-Web APLs (五)
  • ANDROIDWORLD: A Dynamic Benchmarking Environment for Autonomous Agents论文学习
  • Vue的基础使用
  • 【linux】进程等待与进程替换
  • LeetCode343.整数拆分
  • 客户端发送http请求进行流量控制
  • 如何绕过Captcha并使用OCR技术抓取数据
  • 如何轻松导出所有 WordPress URL 为纯文本格式