导读

Linux 基金会认证系统管理员(LFCS)的另一个有用的命令是 “sed”,最初表示“流式编辑器” Streaming EDitor。

“sed” 命令是一个可以将文件作为流进行编辑的编辑器。流式传输文件的方法是从另一个命令使用管道(> 或 |)传递,或将其直接加载到 “sed” 中。

该命令的工作方式与其他编辑器相同,只是文件不显示,也不允许可视化编辑。命令被传递给 “sed” 来操纵流。

用 “sed” 可以做五件基本的事。当然,“sed” 如此强大,还有其他高级的功能,但你只需要集中精力在五件基本的事上。五种功能类型如下:

搜索

替换

删除

添加

改变/变换

在深入命令参数之前,我们需要看看基本的语法。

语法

“sed” 命令的语法是:

sed [选项] 命令 [要编辑的文件]

本文将在适当的部分中介绍这些“选项”。“命令”可以是正则表达式的搜索和替换模式。请继续阅读了解 “sed” 如何工作的并学习基本命令。正如我之前提到的,“sed” 是一个非常强大的工具,有更多的选项可用,我将在本文中介绍。

示例文件

如果你打开一个终端,那你可以创建一个用于 “sed” 示例的文件。执行以下命令:

cd ~

grep --help >grephelp.txt

你现在应该在 HOME 文件夹中有一个名为 grephelp.txt 的文件。该文件的内容是 grep 命令的帮助说明。

搜索

搜索特定字符串是编辑器的常见功能,在 “sed” 中执行搜索也不例外。

执行搜索以在文件中查找字符串。我们来看一下基本的搜索。

如果我们想在示例文件搜索 PATTERN 这个词,我们将使用如下命令:

sed -n 's/PATTERN/PATTERN/p' grephelp.txt

注意: 如果剪切粘贴命令,请确保将单引号替换为键盘上的标准单引号。

参数 -n 用于抑制每行的自动打印(除了用 p 命令指定的行)。默认情况下,流入 “sed” 的每一行将被打印到标准输出(stdout)。如果你不使用 “-n” 选项运行上述命令,你将看到原始文件的每一行以及匹配的行。

要搜索的文件名是我们在“示例文件”部分中创建的 “grephelp.txt”。

剩下的部分是 's/PATTERN/PATTERN/p' 。这一段基本分为四个部分。第一部分的 s 指定执行替换,或搜索并替换。

剩下的第二部分和第三部分是模式。第一个是要搜索的模式,最后一个是替换流中匹配字符串的模式。此例中,我们找到字符串 PATTERN,并用 PATTERN 替换。通过查找和替换相同的字符串,我们完全不会更改文件,甚至在屏幕上也一样。

最后一个命令是 p。 它指定在替换后打印新行。当然,因为替换的是相同的字符串,所以没有改变。由于我们使用 -n 参数抑制打印行,所以更改的行将使用 p 命令打印。

这个完整的命令允许我们执行搜索并查看匹配的结果。

替换

当搜索特定字符串时,你可能希望用匹配的字符串替换新字符串。用另一个字符串替换是很常见的操作。

我们可以使用以下命令执行相同的搜索:

sed -n 's/PATTERN/Pattern/p' grephelp.txt

在这时,字符串 “PATTERN” 变为 “Pattern” 并显示。如果你使用命令 cat grephelp.txt 查看文件,你会看到该文件没有更改。该更改仅对屏幕上的输出进行。你可以使用以下命令将输出通过管道传输到另一个文件:

sed 's/PATTERN/Pattern/' grephelp.txt > grephelp1.txt

现在将存在一个名为 grephelp1.txt 的新文件,其中保存了更改的文件。如果 p 作为第四个选项留下,那么有个问题是被替换的字符串的每一行将在文件中重复两次。我们也可以删除 “-n” 参数以允许所有的行打印。

使用相同字符串替换字符串的另一种方法是使用 & 符号来表示搜索字符串。例如,命令 s/PATTERN/&/p 效果是一样的。我们可以添加字符串,例如添加 S,可以使用命令 s/PATTERN/&S/p。

如果我们希望在每一行中只替换某种模式呢?可以指定要替换的匹配项的特定出现。当然,每一行的替换都是一个特定的编号。例如,示例文件上有很多破折号。一些行至少有两条破折号,所以我们可以用另一个字符代替每一行的第二个破折号。每行用星号 * 替换第二个破折号 - 的命令将是:

sed 's/-/*/2' grephelp.txt

在这里,我们用最初的 s 来执行替换。字符 - 被替换为 *。2 表示我们想要替换每行上的第二个 -(如果存在)。如果我们忽略了命令 2,则替换第一次出现的破折号。只有第一个破折号而不是每行的破折号都被替换。

如果要搜索并替换带有星号的行上的所有破折号,请使用 g 命令:

sed 's/-/*/g' grephelp.txt

命令也可以组合。假设你想要替换从第二次开始出现的破折号,命令将是:

sed 's/-/*/2g' grephelp.txt

现在从第二个开始出现的破折号将被星号取代。

删除

搜索过程中有很多时候你可能想要完全删除搜索字符串。

例如,如果要从文件中删除所有破折号,你可以使用以下命令:

sed 's/-//g' grephelp.txt

替换字符串为空白,因此匹配的字符串将被删除。

添加

当找到匹配时,你可以添加一行特定的文本,来使这行在浏览或打印中突出。

如果要在匹配后插入新行,那么使用 a 命令,后面跟上新行的字符串。还包括要匹配的字符串。例如,我们可以找到一个 --,并在匹配的行之后添加一行。新行的字符串将是 double dash before this line。

sed '/--/ a "double dash before this line"' grephelp.txt

如果要在包含匹配字符串的行之前加上这行,请使用 i 命令,如下所示:

sed '/--/ i "double dash after this line"' grephelp.txt

改变/变换

如果需要改变/变换一行,则可以使用命令 c。

假设我们有个有一些私人信息的文档,我们需要更改包含特定字符串的行。c 命令将改变整行,而不仅仅是搜索字符串。

假设我们想要阻止示例文件中包含单词 PATTERN 的每一行。更改的行将显示为 This line is Top Secret。命令是:

sed '/PATTERN/ c This line is Top Secret' grephelp.txt

可以进行更改特定字母的大小写的转换。例如,我们可以使用命令 y 将所有小写 a 更改为大写 A,如下所示:

sed 'y/a/A/' grephelp.txt

可以指定多个字母,如 abdg,如下命令所示:

sed 'y/abdg/ABDG/' grephelp.txt

确保第二组字母与第一组字母的顺序相同,否则会被替换和转换。例如,字符串 y/a/D/ 将用大写 D 替换所有小写的 a。

就地更改

如果你确实要更改所使用的文件,请使用 -i 选项。

例如,要将 PATTERN 改为 Pattern,并对文件进行更改,则命令为:

sed -i 's/PATTERN/Pattern/' grephelp.txt

现在文件 grephelp.txt 将被更改。-i 选项可以与上述任何命令一起使用来更改原始文件的内容。

练习这些命令,并确保你理解它们。“sed” 命令非常强大。

(题图:Pixabay,CC0)

本文由 LCTT 原创编译,Linux中国 荣誉推出

linux sed在容器中怎么用,概述LFCS 基础之sed用法相关推荐

  1. linux进不了容器配置目录,linux – 在Docker容器中使用bcrypt的ELF头文件或安装问题...

    利亚姆的评论是关于钱,只是为互联网上的未来旅行者扩展它. 问题是您已将node_modules文件夹复制到容器中.这是一个问题的原因是bcrypt是一个本机模块.它不仅仅是javascript,还包括 ...

  2. linux备份docker容器中的postgresql,并且把备份文件拷贝到宿主机

    该脚本实现备份docker中的postgresql数据,并且把备份文件拷贝到宿主机 配合linux定时任务,可以实现定时备份 #!/bin/bash echo "开始执行 PostgreSq ...

  3. 【小家Spring】Spring注解驱动开发---向Spring Ioc容器中注册Bean的7种方式

    每篇一句 比你有钱的人一定会比你努力,而比你努力的人终有一天会比你有钱 前言 Spring是一个非常强大的反转控制(IOC)框架,以帮助分离项目组件之间的依赖关系.因此可以说Spring容器对Bean ...

  4. Linux安装Docker容器环境centos中安装docker-compose容器编排dockerfile文件构建镜像(史上最详细的docker)

    在Linux系统下安装docker容器环境 1.容器介绍 1.1 镜像(Image) 镜像可以用来创建Docker 容器,Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像, 用户甚至可 ...

  5. .NET程序在Linux容器中的演变

    本文讲的是.NET程序在Linux容器中的演变[编者的话]Linux容器技术已被开发人员所熟知,现在.NET程序可以跑在Docker容器中,这为以Windows中心的开发人员带来了好处. [上海站|3 ...

  6. 在Linux和Windows的Docker容器中运行ASP.NET Core

    译者序:其实过去这周我都在研究这方面的内容,结果周末有事没有来得及总结为文章,Scott Hanselman就捷足先登了.那么我就来翻译一下这篇文章,让更多的中文读者看到.当然Scott遇到的坑我也遇 ...

  7. linux安装无法添加挂载,linux-无法在已挂载/ etc / passwd和/ etc / shadow的docker容器中添加新用户...

    问题示例: docker run -ti -v my_passwd:/etc/passwd -v my_shadow:/etc/shadow --rm centos [root@681a5489f3b ...

  8. Docker容器中的Linux机器快速设置国内源

    Docker容器中的Linux机器快速设置国内源 在Docker容器中启动了服务后,当我们进入容器内,经常很多命令无法使用,比如最基本的vim,可能都没有安装,因为容器内只安装应用服务,导致无法编辑配 ...

  9. 使用Linux docker容器中的集成安全性对SQL Server的.Net Core客户端进行身份验证

    目录 面对问题 逐步发现解决方案 先决条件 我们的演示应用 在容器中准备kerberos身份验证 KDC消费所需的包 创建一个合适的krb5.conf文件 生成keytab文件 Docker化演示应用 ...

最新文章

  1. NLP机器翻译深度学习实战课程基础 | 深度应用
  2. 微软超过苹果 成为全球第一大市值公司
  3. iOS NSString 与NSData转化
  4. ARM编译中的RO、RW和ZI DATA区段[转]
  5. paip.验证码识别---判断图片是否是彩色图片
  6. 赋能10000家合作伙伴! | 凌云时刻
  7. 微信小程序云函数发天气预报
  8. mysql远程连接数据库的二种方法_mysql 远程连接数据库的二种方法 | 速光网络博客...
  9. scikit-video读写视频
  10. gre计算机考试科目,gre的考试内容和科目
  11. 计算机安装Hp1005打印机,hp1005打印机驱动官方版
  12. 线性模型之二:线性回归模型性能的评估(残差图、MSE与R2)
  13. 交互入门——基于鼠标控制的射击飞碟小游戏
  14. 无法安装64位office,因为已有32位版本……解决办法
  15. Redis高可用之哨兵模式
  16. Python爬虫小结(转)
  17. 电力系统静态稳定性仿真Matlab编程 用simulink搭建搭建单机无穷大系统,对其静态稳定性进行仿真分析
  18. 王道论坛机试指南学习笔记(一)经典入门
  19. python爱心代码_「含蓄优雅表白神器」程序员式用python代码画爱心(附详细教程)...
  20. Oracle 12c PDB浅析(r9笔记第10天)

热门文章

  1. AAAI 2021 | 用于图拓扑演化的深度图谱进化网络
  2. 从工作的角度,NLP/CV/推荐系统选哪个?
  3. 节后收心困难?这15篇论文,让你迅速找回学习状态
  4. NeurIPS 2018 | 腾讯AI Lab:可自适应于不同环境和任务的强化学习方法
  5. 深度学习如何验证自己的想法
  6. 同时满足两个条件怎么写_2020年宅基地确权需满足哪些条件?可以写几个人的名字?...
  7. springboot+springsecurity+mybatis plus之用户授权
  8. 用户密码和cookie,session、token还有AKSK
  9. activiti候选人的多个场景应用
  10. 使用swagger编写开发接口文档