美文网首页
sed 编辑器从入门到够用

sed 编辑器从入门到够用

作者: CHAOS_world | 来源:发表于2019-05-02 13:13 被阅读0次
sed.png

sed 是在命令行环境使用的编辑器,它可以不依赖交互界面来完成一些文本的编辑操作,适合在自动化脚本中用来修改配置文件;或者在缺少界面编辑器的情况下使用,比如很多容器中,连 Vim 都没有,但 sed 小巧,不太占用存储空间,一般是标配。

sed 虽小,却可以完成各种复杂的编辑操作,它的使用教程写一本书都不过分。本文篇幅有限,希望通过一些基于 增删改 的例子,助你掌握 sed 的基本用法,以应对大部分编辑文件的场景。

首先,使用以下命令创建一个名称为 file1 的文件并写入几行文本:

echo "Hello world" > file1
echo "Hello chaos world" >> file1
echo "Bye" >> file1

运行 cat file1 ,查看 file1 文件内容,显示如下:

Hello world
Hello chaos world
Bye

基本用法:sed [选项] 命令 文件名

sed 是基于的编辑器,通过命令逐行编辑内容,编辑后的结果默认会直接输出,不保存到文件。如果需要将结果保存到文件,加上 -i 选项即可。以下示例都是直接输出。

d 命令,删除行

sed 'd' file1

这个例子中,d 命令会应用到每一行,即删除每一行,所以最终输出结果为空。如果想要删除指定的行,可以在 d 命令前面加入行号;或者指定起始行和终止行,以 , 分隔。例如:

# 删除第 2 行
sed '2d' file1
# 删除 1~3 行
sed '1,3d' file1

ia 命令,插入与追加新行

# 在第 2 行之前插入内容
sed '2i prepended line' file1
# 在第 2 行之后追加内容
sed '2a appended line' file1

macOS / osx 自带的 POSIX 版 sed 不允许这样插入或者追加新行,建议安装 GNU 版 sed,然后使用 gsed 命令代替 sed。使用 brew 来安装 gnu-sed :

brew install gnu-sed

s 命令,字符串的查找替换

# 将所有行的 "Hello" 替换为 "Hi"
sed 's/Hello/Hi/' file1

类似的,也可以在指定的行进行查找替换。另外,支持使用正则表达式查找,比如:

# 将第 2 行的第 1 个字符替换为空
sed '2s/^.//' file1
# 分隔符并非一定是 "/" ,例如可以使用 "!" 来分隔:
sed '2s!^.!!' file1

比较常见的场景如:给配置文件某一行添加注释或去掉注释

# 给第 2 行加上 '#'
sed '2s/^/#/' file1
# 去掉第 2 行行首的 '#'
sed '2s/^#//' file1

p 命令,打印行

# 打印出包含 "world" 的行
sed '/world/p' file1

输出结果如下:

Hello world
Hello world
Hello chaos world
Hello chaos world
Bye

结果是不是和预期的不一样?由于 sed 是基于行处理的,默认会将每一行处理后的结果输出,在没有任何命令的情况下,相当于逐行输出了整个文件内容;我们同时使用了 p 命令对包含 "world" 的行打印了一次,所以符合查找的行最终都被打印了两遍。解决办法很简单,只要带上 -n 选项,就会关闭默认输出:

sed -n '/world/p' file1

使用 r 命令读取标准输出的内容

这个命令稍微复杂一些。如果了解管道、标准输出和标准输入的概念,还可以将其他程序的输出结果追加到目标文件的指定位置:

# 将 echo 输出的内容追加到 file1 文件的第一行后面
echo "appended line" | sed '1r /dev/stdin' file1

甚至可以交互式在指定位置插入内容,这个比较实用,值得一试:

cat <<EOF | sed '2r /dev/stdin' file1
# 输入内容,可以是多行,结束输入后内容就会追加至第 2 行
# 如何结束输入?换行后输入 EOF 并敲回车

我们还可以借用 diff 命令预览一下我们的修改:

echo "appended line" | sed '1r /dev/stdin' file1 | diff -u file1 -

可以清楚地展示出变动的部分:

@@ -1,3 +1,4 @@
 Hello world
+appended line
 Hello chaos world
 Bye

总结

以上介绍了 sed 的常用命令:

  • d 删除行
  • s 查找替换
  • ia 插入与追加
  • p 打印行
  • r 追加从文件中读取的内容,常用来读取标准输入 /dev/stdin

以及它的选项:

  • -i 将结果保存到文件
  • -n 关闭默认输出

这只是其中一小部分命令与选项,但是熟练掌握这些就足以应对常规的编辑任务。另外,你可以对同一行使用多个命令,支持同时编辑多个文件,如果熟知管道、正则表达式就更好了,能完成较为复杂的编辑操作。

其实,你不必等到精通 sed 才去使用它。

相关文章

  • sed 编辑器从入门到够用

    sed 是在命令行环境使用的编辑器,它可以不依赖交互界面来完成一些文本的编辑操作,适合在自动化脚本中用来修改配置文...

  • 【shell笔记>文本处理】初识sed与gawk

    博文阅读 学习内容: 学习sed编辑器gawk编辑器入门sed编辑器基础 shell脚本最常见的一个用途就是处理文...

  • sed命令使用

    sed基本用法:sed: stream EDitor 行编辑器,(全屏编辑器:vi)。 sed: 模式空间 默...

  • inux学习 Day15-sed基本用法

    文本处理工具:grep,sed(流编辑器),awk sed基本用法:sed(Stream EDitor)行编辑器(...

  • sed常用操作命令

    sed: stream editor , 流/行 编辑器 ; sed 命令详解: sed [OPTIONS].....

  • 8-Linux sed 命令用法

    sed的基本用法 sed : String EDitor (流编辑器)行编辑器,逐行处理文本 全屏编辑器(vi) ...

  • 20170809 sed文本处理工具

    一、sed 工具简介 sed Stream EDitor, 行编辑器 工具特性:sed是一种流编辑器,每次处理一行...

  • Linux -- sed命令

    一、sed编辑器简介 sed编辑器被称作流编辑器(stream editor),和普通的交互式文本编辑器恰好相反。...

  • sed

    文本处理sed sed(Stream EDitor, 行编辑器):处理文本的工具。sed是一种流编辑器,它一次处...

  • sed 编辑器

    sed ## 流编辑器 sed 一、sed工作流程 sed 是一种在线的、非交互式的编辑器,它一次处理一行内容。处...

网友评论

      本文标题:sed 编辑器从入门到够用

      本文链接:https://www.haomeiwen.com/subject/saimnqtx.html