linux神器sed快速入门,不好用你打我!

为什么要学习sed

sed(Stream EDitor)被誉为Linux三剑客之一,负责过滤和转换文本,功能灵活又强大,搭配正则表达式更是如虎添翼。

如果你需要向1000行文本中的某一行后添加新行,如果你需要删除/查找文本中从me到you之间的内容,那么sed命令是你的最佳选择。

sed命令的工作模式

sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。具体过程如下:首先sed把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上。sed每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处理和显示。处理完输入文件的最后一行后,sed便结束运行。sed把每一行都存在临时缓冲区中,对这个副本进行编辑,所以不会修改原文件。所以sed编辑器默认不会改动文件内容。

linux神器sed快速入门,不好用你打我!

sed命令的格式

  1. sed [options] ‘command’ files
  2. sed [options] -f scriptfile files

常用的options:

-n # 禁止将模式空间(临时缓存区)的内容打印出来

-r # 使用扩展正则表达式

-f # 使用文件,后跟文件名,使用脚本文件中的sed动作处理目标文件

-i # 直接修改文件内容

-e # 直接在命令行模式下进行sed脚本命令编辑,默认选项

常用的command:

无地址或单地址command

a /

text # 将text追加到指定/匹配所在行下,若不指定位置会在每行下执行此动作。多个行用反斜杠\加回车隔开

sed '$a \
This is a test for sed.' /etc/group

i /

text # 将text插入指定/匹配所在行之上

sed '$i \
This is a second test for sed.'  /etc/group

r filename # 将指定文件的文本追加到指定位置

sed '$r ./test.sh' /etc/group

接受地址范围的command:

c \

text # 将text替换选定的范围的内容

sed '60,64c \
\line 60-64 is empty' /etc/group

d # 将匹配到的行删除

替换标记s相关命令

格式如下:s/正则/替换内容/标记

其中常用的标记有:

n # 表示替换范围内第n个目标。

某段文本内出现了3次’abc’,如果把n写为3,就表示把第三个abc替换掉

g # 表示范围内全局替换,如果没有g则在第一处匹配到的位置完成替换

p # 输出匹配到的行,一般与option中-n联用

sed -n 's/zhangsan$/lisi/p' /etc/group    # 把/etc/group中以zhangsan结尾的位置替换为李四,并把结果打印到屏幕上

sed命令范例

[root@study_rhel Desktop]# sed '$a \
\
This is a append test for sed.\

' /etc/group    # 在/etc/group行末追加一行文字,前后各空一行
......

apache:x:48:
zhangsan:x:1001:
project:x:1002:zhangsan

This is a append test for sed.

[root@study_rhel Desktop]# sed '$i \
This is a second test for sed.\
Sed is a very powerful tool.' /etc/group    # 在/etc/group行末前插入两行文字
......

zhangsan:x:1001:
This is a second test for sed.

Sed is a very powerful tool.

project:x:1002:zhangsan
[root@study_rhel Desktop]# sed '/^linuxprobe/r /etc/shadow' /etc/group    # 匹配以linuxprobe开头的行并在行后完整插入/etc/shadow中的文本内容
......

linuxprobe:x:1000:linuxprobe    # /etc/shadow文件内容在下一行插入
root:$......

......

zhangsan:$......    # 文件插入结束
apache:x:48:
zhangsan:x:1001:
project:x:1002:zhangsan
[root@study_rhel Desktop]# sed '/^linuxprobe/,/^zhangsan/c \
> Both of you were deleted!' /etc/group    # 用一段文字替换掉从以linuxprobe开头的行到以zhangsan开头的行,起止用逗号隔开
......

postfix:x:89:
sshd:x:74:
tcpdump:x:72:
Both of you were deleted!

project:x:1002:zhangsan

已知一个组名project,组内成员有zhangsan。某天需要把linuxprobe也加入此组中,如果此时你作为管理员却忘记了useradd -G 命令,是否还有其他的方法可以把linuxprobe加入组中?

我们知道/etc/group是用户组的记录文件,先tail查看一下这个文件

[root@study_rhel Desktop]# tail -n 3 /etc/group
apache:x:48:
zhangsan:x:1001:
project:x:1002:zhangsan    # 以冒号分隔的区段中,最后一段记录了组内的用户名称
                          # 我们可以vim打开修改这个文件,更直接的方法是用sed!
[root@study_rhel Desktop]# sed -i '/^project/ s/$/,linuxprobe/' /etc/group    # 匹配以project开头的行并在行末把",linuxprobe"替换上去
[root@study_rhel Desktop]# tail -n 3 /etc/group
apache:x:48:
zhangsan:x:1001:
project:x:1002:zhangsan,linuxprobe
[root@study_rhel Desktop]# id linuxprobe
uid=1000(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe),1002(project)
[root@study_rhel Desktop]# groups linuxprobe
linuxprobe : linuxprobe project    # linuxprobe的支持群组多了个project
[root@study_rhel Desktop]# sed -i '/^project/ s/,linuxprobe$//' /etc/group    # 演示完毕,删掉他,别忘了逗号

sed命令确实很强大吧!但作为系统管理员要有谨慎行事的风格,不要像例子里一样搞”歪门邪道”。

Original: https://www.cnblogs.com/randyszone/p/16306062.html
Author: randy198
Title: linux神器sed快速入门,不好用你打我!

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/583080/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Sharding-jdbc + Seata + Nacos整合

    前置条件 先了解Sharding-jdbc、Seata、Nacos这三样东西各自的作用以及单独使用时的配置。 如果已经做过Seata + Nacos的整合的,直接看最后的 Seat…

    Linux 2023年6月7日
    0111
  • redis重点是 dir 的默认配置一定要改

    find / -name dump.rdb 发现有两个dump文件,这两个文件目录不一致,问题在于 redis.conf 文件属性dir,默认配置是dir ./ 表示在哪启动ser…

    Linux 2023年5月28日
    085
  • SpringBoot——Redis实现分布式集群Session共享

    1.添加pom.xml依赖 org.springframework.boot   spring-boot-starter-data-redis   org.springframew…

    Linux 2023年5月28日
    092
  • Linux安装宝塔,OCI8,连接ORACLE数据库

    基础环境 centos7 安装BT宝塔 网址:https://www.bt.cn/download/linux.h…

    Linux 2023年6月6日
    0115
  • 博客园装饰——(一)置顶菜单栏

    功能描述:当页面向下滚动到菜单栏上边沿触碰到浏览器窗口上边沿时,菜单栏会固定地显示在浏览器窗口上方(贴紧),即达到了置顶菜单栏的效果。而当页面向上滚动到原来的位置时,菜单栏又会自动…

    Linux 2023年6月14日
    0114
  • 51单片机入门基础介绍

    基本元器件原理及功能 常用元器件 CAP 电容RES 电阻CRYSTAL 晶振7SEG 数码管sounder 蜂鸣器BUTTONLED-BIBY 二极管PN结,P阳极N阴极,电流方…

    Linux 2023年6月7日
    098
  • 关于熵,条件熵,交叉熵等的介绍

    参考:《数学之美》一文搞懂交叉熵在机器学习中的使用,透彻理解交叉熵背后的直觉详解机器学习中的熵、条件熵、相对熵和交叉熵常用的分类问题中的损失函数 1.信息量与信息熵 香农在他著名的…

    Linux 2023年6月13日
    098
  • MacOS设置终端代理

    前言 国内的开发者或多或少都会因为网络而烦恼,因为一些特殊原因有时候网络不好的时候需要使用代理才能完成对应的操作。原来我一直都是使用斐讯路由器然后刷了梅林的固件,直接在路由器层面设…

    Linux 2023年6月14日
    097
  • git 的使用

    git 的使用 1、介绍 代码版本管理、协同开发 对文件(代码)进行版本管理 完成协同开发 项目,帮助程序员整合代码 i)帮助开发者合并开发的代码 ii)如果出现冲突代码的合并,会…

    Linux 2023年6月14日
    097
  • Locationhttpd反向代理

    Location\httpd\反向代理 参考:http://tengine.taobao.org/nginx_docs/cn/docs/http/ngx_http_core_mod…

    Linux 2023年6月11日
    0107
  • CentOS单机安装k8s并部署.NET 6程序 压测 记录

    前面部分依照CentOS单机安装k8s并部署.NET 6程序来进行,内存、cpu、centos版本一致,之前222元买的三年8M 2c4g 腾讯云轻量服务器,这个教程算是写的很详细…

    Linux 2023年6月7日
    0108
  • 编写radware的负载配置

    radware如何添加负载服务? 笔者在新添加radware的新负载服务的时候,是习惯去看下上一个负载服务的ID 和 节点服务的ID 号 分别是多少,主要是避免ID冲突,把其他服务…

    Linux 2023年6月8日
    0105
  • Docker搭建Redis Cluster集群及扩容和收容

    上一篇文章讲解了Redis集群原理及搭建,由于工作中使用docker较多,本文主要讲解使用docker搭建集群及对集群的扩展收容。环境:Centos7.6Docker:20.10….

    Linux 2023年6月13日
    083
  • docker 安装mysql5.7

    docker 安装mysql5.7 前言 MySQL 是目前最流行的关系型数据库管理系统,开发者是瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网…

    Linux 2023年6月6日
    099
  • linux安装Oracle11G

    1、Linux下以Oracle帐户进入Linux系统。 2、执行以下命令查看数据库监听器的状况: lsnrctl status 3、执行以下命令停止数据库监听器运行: lsnrct…

    Linux 2023年6月13日
    081
  • git 那些事儿 —— 基于 Learn Git Branching

    推荐一个 git 图形化教学网站:Learn Git Branching,这个网站有一个沙盒可以直接在上面模拟 git 的各种操作,操作效果使用图形的方式展示,非常直观。本文可以看…

    Linux 2023年5月27日
    0132
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球