您当前的位置:首页 > 电脑百科 > 软件技术 > 操作系统 > linux

Linux sed命令

时间:2021-12-17 12:03:51  来源:  作者:仙风道骨的宝石骑士

大数据技术AI Flink/Spark/Hadoop/数仓,数据分析、面试,源码解读等干货学习资料 98篇原创内容 -->

公众号

 

linux sed 命令是利用脚本来处理文本文件。

sed 可依照脚本的指令来处理、编辑文本文件。

Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。

1 语法

 sed [-hnV][-e<script>][-f<script文件>][文本文件]

1.1 参数说明

  • -e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
  • -f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
  • -h或--help 显示帮助。
  • -n或--quiet或--silent 仅显示script处理后的结果。
  • -V或--version 显示版本信息。

1.2 动作说明

  • a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
  • c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
  • d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
  • i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
  • p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
  • s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!

2、以行为单位的新增/删除

2.1 将 passwd 复制一份, 并将他内容列出并且列印行号,同时,请将第 2~5 行删除!

 [root@hadoop01 root]$   nl passwd
      1 root:x:0:0:root:/root:/bin/bash
      2 bin:x:1:1:bin:/bin:/sbin/nologin
      3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
      4 halt:x:7:0:halt:/sbin:/sbin/halt
      5 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
      6 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
      7 nobody:x:99:99:Nobody:/:/sbin/nologin
      8 sssd:x:997:995:User for sssd:/:/sbin/nologin
      9 polkitd:x:996:994:User for polkitd:/:/sbin/nologin
    10 Apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
    11 abrt:x:173:173::/etc/abrt:/sbin/nologin
    12 rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
    13 unbound:x:994:992:Unbound DNS resolver:/etc/unbound:/sbin/nologin
    14 memcached:x:993:991:Memcached daemon:/run/memcached:/sbin/nologin
    15 rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
 
 
 [root@hadoop01 root]$ nl passwd | sed '2,5 d'
      1 root:x:0:0:root:/root:/bin/bash
      6 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
      7 nobody:x:99:99:Nobody:/:/sbin/nologin
      8 sssd:x:997:995:User for sssd:/:/sbin/nologin
      9 polkitd:x:996:994:User for polkitd:/:/sbin/nologin
    10 apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
    11 abrt:x:173:173::/etc/abrt:/sbin/nologin
    12 rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
    13 unbound:x:994:992:Unbound DNS resolver:/etc/unbound:/sbin/nologin
    14 memcached:x:993:991:Memcached daemon:/run/memcached:/sbin/nologin
    15 rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin

sed 的动作为 '2,5d' ,那个 d 就是删除!因为 2-5 行给他删除了,所以显示的数据就没有 2-5 行

另外,注意一下,原本应该是要下达 sed -e 才对,没有 -e 也行!同时也要注意的是, sed 后面接的动作,请务必以 '' 两个单引号括住喔!

2.2 只要删除第 2 行

 [root@hadoop01 root]$   nl passwd | sed '2d'
      1 root:x:0:0:root:/root:/bin/bash
      3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
      4 halt:x:7:0:halt:/sbin:/sbin/halt
      5 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
      6 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
      7 nobody:x:99:99:Nobody:/:/sbin/nologin
      8 sssd:x:997:995:User for sssd:/:/sbin/nologin
      9 polkitd:x:996:994:User for polkitd:/:/sbin/nologin
    10 apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
    11 abrt:x:173:173::/etc/abrt:/sbin/nologin
    12 rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
    13 unbound:x:994:992:Unbound DNS resolver:/etc/unbound:/sbin/nologin
    14 memcached:x:993:991:Memcached daemon:/run/memcached:/sbin/nologin
    15 rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin

2.3 在第二行后(亦即是加在第三行)加上『hadoop』字样!

 [root@hadoop01 root]$ nl passwd | sed '2a hadoop'
      1 root:x:0:0:root:/root:/bin/bash
      2 bin:x:1:1:bin:/bin:/sbin/nologin
 hadoop
      3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
 

2.4 在第二行前

 [root@hadoop01 root]$ nl passwd | sed '2i hadoop'
      1 root:x:0:0:root:/root:/bin/bash
 hadoop
      2 bin:x:1:1:bin:/bin:/sbin/nologin
      3 daemon:x:2:2:daemon:/sbin:/sbin/nologin

2.5 增加两行以上,在第二行后面加入两行字

 [root@hadoop01 root]$ nl passwd | sed '2a hadoop 
 > scala'
      1 root:x:0:0:root:/root:/bin/bash
      2 bin:x:1:1:bin:/bin:/sbin/nologin
 hadoop
 scala
      3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
 

每一行之间都必须要以反斜杠『 』来进行新行的添加喔!所以,上面的例子中,我们可以发现在第一行的最后面就有 存在。

3、以行为单位的替换与显示

3.1 将第2-5行的内容取代成为『hello world』

 
 [root@hadoop01 root]$ nl passwd | sed '2,5c hello world'
      1 root:x:0:0:root:/root:/bin/bash
 hello world
      6 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
 

4、数据的搜寻并显示

4.1 root关键字的行

 [root@hadoop01 root]$ nl passwd | sed '/root/p'
      1 root:x:0:0:root:/root:/bin/bash
      1 root:x:0:0:root:/root:/bin/bash
      2 bin:x:1:1:bin:/bin:/sbin/nologin
      3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
      4 halt:x:7:0:halt:/sbin:/sbin/halt
      5 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
      6 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
      7 nobody:x:99:99:Nobody:/:/sbin/nologin
      8 sssd:x:997:995:User for sssd:/:/sbin/nologin
      9 polkitd:x:996:994:User for polkitd:/:/sbin/nologin
    10 apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
    11 abrt:x:173:173::/etc/abrt:/sbin/nologin
    12 rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
    13 unbound:x:994:992:Unbound DNS resolver:/etc/unbound:/sbin/nologin
    14 memcached:x:993:991:Memcached daemon:/run/memcached:/sbin/nologin
    15 rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin

如果root找到,除了输出所有行,还会输出匹配行。

使用-n的时候将只打印包含模板的行

 [root@hadoop01 root]$ nl passwd | sed -n '/root/p'
      1 root:x:0:0:root:/root:/bin/bash

5、数据的搜寻并删除

5.1 删除/passwd所有包含root的行,其他行输出

 [root@hadoop01 root]$ nl passwd | sed '/root/d'
      2 bin:x:1:1:bin:/bin:/sbin/nologin

6、数据的搜寻并执行命令

6.1 搜索passwd,找到root对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把root替换为hadoop,再输出这行:

  1. p:打印所有的;
  2. q:打印匹配的
 [root@hadoop01 root]$ nl passwd | sed '/root/{s/root/hadoop/;p;q;}'
      1 hadoop:x:0:0:root:/root:/bin/bash
      1 hadoop:x:0:0:root:/root:/bin/bash
 [root@hadoop01 root]$ nl passwd | sed '/root/{s/root/hadoop/;p}'
      1 hadoop:x:0:0:root:/root:/bin/bash
      1 hadoop:x:0:0:root:/root:/bin/bash
      2 bin:x:1:1:bin:/bin:/sbin/nologin
      3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
      ...

7、数据的搜寻并替换

除了整行的处理模式之外, sed 还可以用行为单位进行部分数据的搜寻并取代。基本上 sed 的搜寻与替代的与 vi 相当的类似

 sed 's/要被取代的字串/新的字串/g'

7.0 只要第一行的数字部分

 [root@hadoop01 root]$ nl passwd | sed -n '/root/p'
      1 root:x:0:0:root:/root:/bin/bash

7.1 删除第一行,数字前半部分

 [root@hadoop01 root]$ nl passwd | sed -n '/root/p' | sed 's/^.*x://g'
 0:0:root:/root:/bin/bash

s/后面的字符串是包含的关系

7.2 删除第一行,数字后半部分

 [root@hadoop01 root]$ nl passwd | sed -n '/root/p' | sed 's/^.*x://g' | sed 's/:root.*$//g'
 0:0

8、多点编辑

8.1 一条sed命令,删除passwd第四行到末尾的数据,并把root替换为hadoop

 [root@hadoop01 root]$ nl passwd | sed -e '4,$d'
      1 root:x:0:0:root:/root:/bin/bash
      2 bin:x:1:1:bin:/bin:/sbin/nologin
      3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
 
 
 [root@hadoop01 root]$ nl passwd | sed -e '4,$d' -e 's/sbin/hadoop/g'
      1 root:x:0:0:root:/root:/bin/bash
      2 bin:x:1:1:bin:/bin:/hadoop/nologin
      3 daemon:x:2:2:daemon:/hadoop:/hadoop/nologin

-e表示多点编辑,第一个编辑命令删除passwd第三行到末尾的数据,第二条命令搜索root替换为hadoop

9、直接修改文件内容(危险动作)

9.1 sed 将 passwd 内每一行结尾若为 nologin 则换成 hadoop

 [root@hadoop01 root]$ sed -i 's/nologin$/hadoop/g' passwd
 [root@hadoop01 root]$ nl passwd
      1 root:x:0:0:root:/root:/bin/bash
      2 bin:x:1:1:bin:/bin:/sbin/hadoop
      3 daemon:x:2:2:daemon:/sbin:/sbin/hadoop
      4 halt:x:7:0:halt:/sbin:/sbin/halt
      5 mail:x:8:12:mail:/var/spool/mail:/sbin/hadoop
      6 ftp:x:14:50:FTP User:/var/ftp:/sbin/hadoop
      7 nobody:x:99:99:Nobody:/:/sbin/hadoop
      8 sssd:x:997:995:User for sssd:/:/sbin/hadoop
      9 polkitd:x:996:994:User for polkitd:/:/sbin/hadoop
    10 apache:x:48:48:Apache:/usr/share/httpd:/sbin/hadoop
 ...

9.2 sed 将 passwd 内每二行替换为 --hello world

 [root@hadoop01 root]$ sed -i '2c --hello world' passwd
 [root@hadoop01 root]$ nl passwd
      1 root:x:0:0:root:/root:/bin/bash
      2 --hello world
      3 daemon:x:2:2:daemon:/sbin:/sbin/hadoop
      4 halt:x:7:0:halt:/sbin:/sbin/halt
      5 mail:x:8:12:mail:/var/spool/mail:/sbin/hadoop


Tags:sed命令   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
大数据技术AI Flink/Spark/Hadoop/数仓,数据分析、面试,源码解读等干货学习资料 98篇原创内容 -->公众号 Linux sed 命令是利用脚本来处理文本文件。sed 可依照脚本的指令来处...【详细内容】
2021-12-17  Tags: sed命令  点击:(21)  评论:(0)  加入收藏
作用 sed命令是一个非交互式的行文本编辑器,它能对文件内容进行编辑,默认每次处理文本文件中所匹配到一行内容到模式空间,然后用后面的命令进行操作,操作完成之后,会把模式空间里...【详细内容】
2020-10-27  Tags: sed命令  点击:(154)  评论:(0)  加入收藏
正常来说,我们想要删除文件中的某些行内容,一般都是先打开这个文件,然后找到要删除的内容,再然后选中这些行并按删除键进行删除,这在数据量很少时是没有问题的。但是,一旦文件中的...【详细内容】
2020-08-27  Tags: sed命令  点击:(75)  评论:(0)  加入收藏
简介sed命令应用广泛,使用简单,是文本流编辑器的利器,逐行对文件的内容进行处理处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),可以指定仅仅处理...【详细内容】
2020-03-13  Tags: sed命令  点击:(82)  评论:(0)  加入收藏
▌简易百科推荐
作用显示文件或目录所占用的磁盘空间使用命令格式du [option] 文件/目录命令功能显示文件或目录所占用的磁盘空间一些写法的区别du -sh xxx 显示总目录的大小,但是不会列出...【详细内容】
2021-12-23  mitsuhide1992    Tags:du命令   点击:(12)  评论:(0)  加入收藏
什么是linux内核linux就像是一个哲学的最佳实践。如果非要对它评价,我真的不知道该怎么赞叹,我只能自豪地说着:“linux的美丽简直让人沉醉。”我只能说是我处在linux学习的修炼...【详细内容】
2021-12-23  linux上的码农    Tags:linux内核   点击:(15)  评论:(0)  加入收藏
本文将比较 Linux 中 service 和 systemctl 命令,先分别简单介绍这两个命令的基础用法,然后进行比较。从 CentOS 7.x 开始,CentOS 开始使用 systemd 服务来代替 service服务(dae...【详细内容】
2021-12-23  软件架构    Tags:systemctl   点击:(13)  评论:(0)  加入收藏
mv是move的缩写,可以用来移动文件或者重命名文件名,经常用来备份文件或者目录。命令格式mv [选项] 源文件或者目录 目标文件或者目录命令功能mv命令中第二个参数类型的不同(...【详细内容】
2021-12-17  入门小站    Tags:mv命令   点击:(23)  评论:(0)  加入收藏
大数据技术AI Flink/Spark/Hadoop/数仓,数据分析、面试,源码解读等干货学习资料 98篇原创内容 -->公众号 Linux sed 命令是利用脚本来处理文本文件。sed 可依照脚本的指令来处...【详细内容】
2021-12-17  仙风道骨的宝石骑士    Tags:sed命令   点击:(21)  评论:(0)  加入收藏
Node是个啥?  写个东西还是尽量面面俱到吧,所以有关基本概念的东西我也从网上选择性地拿了下来,有些地方针对自己的理解有所改动,对这些概念性的东西有过了解的可选择跳过这段...【详细内容】
2021-12-15  linux上的码农    Tags:node   点击:(21)  评论:(0)  加入收藏
难道只有我一个人觉得Ubuntu的unity桌面非常好用吗?最近把台式机上面的Ubuntu 16.04格式化了,装了黑苹果用了一周,不得不说,MacOS确实很精美,软件生态比Linux丰富很多,比Windows简...【详细内容】
2021-12-14  地球末日村    Tags:ubuntu   点击:(34)  评论:(0)  加入收藏
简介Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。输出信息含义执行net...【详细内容】
2021-12-13  窥镜天    Tags:Linux netstat   点击:(26)  评论:(0)  加入收藏
对于较多数量的文件描述符的监听无论是select还是poll系统调用都显得捉襟见肘,poll每次都需要将所有的文件描述符复制到内核,内核本身不会对这些文件描述符加以保存,这样的设计...【详细内容】
2021-12-13  深度Linux    Tags:Linux   点击:(16)  评论:(0)  加入收藏
今天,我们来了解下 Linux 系统的革命性通用执行引擎-eBPF,之所以聊着玩意,因为它确实牛逼,作为一项底层技术,在现在的云原生生态领域中起着举足轻重的作用。截至目前,业界使用范...【详细内容】
2021-12-10  架构驿站    Tags:eBPF   点击:(24)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条