Sed流编辑器总结

  sed 是 Unix 和 Linux 系统中的一个强大的流编辑器。它用于对文本进行基本的修改和处理。以下是关于 sed 的详细解说,包括其基本语法,常见用法和一些高级用法。

基本语法

sed [选项] '命令' 输入文件

常见选项

  • -e:指定要执行的 sed 命令。
  • -f:指定包含 sed 命令的脚本文件。
  • -i:直接修改文件内容(小心使用)。
  • -n:取消默认输出,适合与 p 命令一起使用来控制输出。
  • -r:使用扩展正则表达式。
  • -s:将输入文件视为独立的文件,而不是一个长的流。
常用命令

  • s: 替换
  • p: 打印
  • d: 删除
  • a: 追加文本在当前行后
  • i: 插入文本在当前行前
  • c: 替换行
  • q: 退出
  • y: 转换字符

基本命令

 -n 可以抑制默认输出,只输出第2行:

    sed -n '2p' file.txt

搜索和替换

  • 基本替换语法sed 's/原文本/新文本/' 输入文件
echo "hello world" | sed 's/world/universe/'  # 输出:hello universe

  • 全局替换g
echo "hello world world" | sed 's/world/universe/g'  # 输出:hello universe universe

  • 指定第几个替换:(指定第二个替换)
echo "hello world world" | sed 's/world/universe/2'  # 输出:hello world universe

  • 匹配模式替换
echo "hello world" | sed '/world/s/hello/hi/'  # 输出:hi world

指定行进行替换

  • 在特定行进行替换
sed '2s/original/replacement/' file.txt  # 替换第2行的内容

  • 在行号范围内替换
sed '2,4s/original/replacement/' file.txt  # 在第2到第4行进行替换

  • 匹配模式进行替换
sed '/pattern/s/original/replacement/' file.txt  # 在包含pattern的行进行替换

删除行

  • 删除指定行
sed '2d' file.txt  # 删除第2行

**删除行号范围内的行**


sed '2,4d' file.txt  # 删除第2到第4行

  • 删除匹配模式的行
sed '/pattern/d' file.txt  # 删除包含pattern的行

插入和追加文本

  • 在指定行前插入文本
sed '2i\插入的文本' file.txt  # 在第2行前插入文本

  • 在指定行后追加文本
sed '2a\追加的文本' file.txt  # 在第2行后追加文本

替换整个文件

使用 -i 选项可以直接在文件内执行替换操作

sed -i 's/original/replacement/g' file.txt  # 直接修改文件内容,替换所有匹配项

高级用法

多点编辑

可以通过 -e 选项进行多次编辑。

sed -e 's/old1/new1/' -e 's/old2/new2/' file.txt

使用脚本文件

如果有一系列的 sed 命令,可以将它们放在一个脚本文件中,然后使用 -f 选项执行。

# commands.sed
s/original/replace1/
s/old/replace2/

# 使用命令执行
sed -f commands.sed file.txt

替换时使用正则表达式
echo "abc123def" | sed -r 's/[0-9]+/[digits]/'  # 输出:abc[digits]def

保留备份文件

在使用 -i 选项时,可以通过添加扩展名来保存备份。

sed -i.bak 's/original/replacement/' file.txt  # 修改文件内容并保留备份 file.txt.bak

只打印匹配的行

结合 -n 选项和 p 命令,只打印与特定模式匹配的行。

sed -n '/pattern/p' file.txt

处理多行文本
# 交换每两行的内容
sed 'N;s/\(.*\)\n\(.*\)/\2\n\1/' file.txt  # 将每两行交换位置

复杂替换示例
# 假设file.txt 内容如下:
# alpha beta
# gamma delta

sed 's/\([aeiou]\)/<\1>/g' file.txt  # 将所有元音替换为<元音>
# alpha beta => <a>lph<a> b<e>t<a>
# gamma delta => g<a>mm<a> d<e>lt<a>

总结

命令/选项 含义 示例
-n 取消默认输出 sed -n 'p' file.txt
-e script 允许多行脚本 sed -e 's/foo/bar/' -e 's/baz/qux/' file.txt
-i[SUFFIX] 直接编辑文件,备份可选 sed -i 's/foo/bar/g' file.txt
-r 使用扩展正则表达式 sed -r 's/[0-9]+/NUMBER/' file.txt
s/old/new/g 替换文本 sed 's/foo/bar/g' file.txt
p 打印行 sed -n '2p' file.txt
d 删除行 sed '3d' file.txt
a\text 在当前行后追加文本 sed '3a\Hello World' file.txt
i\text 在当前行前插入文本 sed '3i\Hello World' file.txt
c\text 替换行 sed '3c\Hello World' file.txt
{} 指定区间的操作 sed '2,4{s/foo/bar/g}' file.txt
y/abc/ABC/ 转换字符 sed 'y/abc/ABC/' file.txt
q 退出 sed '5q' file.txt

相关推荐

  1. Sed编辑器总结

    2024-06-08 05:22:05       8 阅读
  2. shell 编辑器 sed

    2024-06-08 05:22:05       26 阅读
  3. linux常用命令-sed(编辑器)

    2024-06-08 05:22:05       33 阅读
  4. linux三剑客之编辑器sed

    2024-06-08 05:22:05       9 阅读
  5. Vim编辑器命令使用总结

    2024-06-08 05:22:05       13 阅读
  6. 媒体知识总结

    2024-06-08 05:22:05       40 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-08 05:22:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-08 05:22:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-08 05:22:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-08 05:22:05       18 阅读

热门阅读

  1. 腾讯开源人像照片生成视频模型V-Express

    2024-06-08 05:22:05       9 阅读
  2. qgroundcontrol编程入门:探索无人机控制的新境界

    2024-06-08 05:22:05       11 阅读
  3. NLP基础知识讲解比较清楚的文章

    2024-06-08 05:22:05       5 阅读
  4. C++ 变量的声明和初始化方式

    2024-06-08 05:22:05       9 阅读
  5. Nginx介绍

    2024-06-08 05:22:05       7 阅读
  6. OCP学习笔记-007 SQL语言之一:DQL

    2024-06-08 05:22:05       9 阅读
  7. openresty lua修改响应体内容

    2024-06-08 05:22:05       9 阅读
  8. Always语句和assign的用法

    2024-06-08 05:22:05       9 阅读
  9. spring-boot 2.7.18整合sharding-jdbc-spring-boot-starter 4.1.1

    2024-06-08 05:22:05       12 阅读