Linux命令-sed

一、sed简介
Sed是一款流编辑工具,用来对文本进行过滤与替换操作,特别是当你想要对几十个配置文件做统一修改时,你会感受到Sed的魅力!Sed通过一次仅读取一行内容来对某些指令进行处理后输出,所以Sed更适合于处理大数据文件。首先,Sed通过文件或管道读取文件内容,但Sed默认并不直接修改源文件,而是将读入的内容复制到缓冲区中,我们称之为模式空间(pattern space),所有的指令操作都是在模式空间中进行的,然后Sed根据相应的指令对模式空间中的内容进行处理并输出结果,默认输出至标准输出(即屏幕上)。Sed的工作流程如下图所示:
在这里插入图片描述
二、常用基本语法格式

sed [选项]…{脚本指令} [输入文件]

选项含义
-n,–quit,–silent静默输出,默认情况下,sed程序在所有的脚本指令执行完毕后,将自动打印模式空间中的内容,该选项可以屏蔽自动打印。
-e script允许多个脚本指令被执行
-i,–in-place慎用,该选项将直接修改源文件

三、常用脚本指令

  • a,append表示追加指令
  • i,insert表示插入指令
  • d,delete表示删除指令
  • s,substitution表示替换指令
    使用tail -n 10 /var/log//messages >messages.log得到messages.log作为样本数据源,演示sed使用:
[root@slave2 ~]# cat -n messages.log 
     1	May  4 18:15:55 slave2 systemd: Starting Multi-User System.
     2	May  4 18:15:55 slave2 systemd: Starting Update UTMP about System Runlevel Changes...
     3	May  4 18:15:55 slave2 systemd: Started Update UTMP about System Runlevel Changes.
     4	May  4 18:15:55 slave2 systemd: Startup finished in 1.992s (kernel) + 20.077s (initrd) + 44.664s (userspace) = 1min 6.735s.
     5	May  4 18:17:56 slave2 ntpd_intres[653]: host name not found: master
     6	May  4 18:21:08 slave2 systemd: Created slice User Slice of root.
     7	May  4 18:21:08 slave2 systemd: Starting User Slice of root.
     8	May  4 18:21:08 slave2 systemd-logind: New session 1 of user root.
     9	May  4 18:21:08 slave2 systemd: Started Session 1 of user root.
    10	May  4 18:21:08 slave2 systemd: Starting Session 1 of user root.

3.1.1 匹配打印-p指令
匹配Created打印

[root@slave2 ~]# sed -n -e "/Created/p" messages.log 
May  4 18:21:08 slave2 systemd: Created slice User Slice of root.

匹配1-5行打印

[root@slave2 ~]# sed -n -e "1,5p" messages.log 
May  4 18:15:55 slave2 systemd: Starting Multi-User System.
May  4 18:15:55 slave2 systemd: Starting Update UTMP about System Runlevel Changes...
May  4 18:15:55 slave2 systemd: Started Update UTMP about System Runlevel Changes.
May  4 18:15:55 slave2 systemd: Startup finished in 1.992s (kernel) + 20.077s (initrd) + 44.664s (userspace) = 1min 6.735s.
May  4 18:17:56 slave2 ntpd_intres[653]: host name not found: master

3.1.2 匹配删除-d指令
匹配删除Created行

[root@slave2 ~]# sed -e "/Created/d" messages.log 
May  4 18:15:55 slave2 systemd: Starting Multi-User System.
May  4 18:15:55 slave2 systemd: Starting Update UTMP about System Runlevel Changes...
May  4 18:15:55 slave2 systemd: Started Update UTMP about System Runlevel Changes.
May  4 18:15:55 slave2 systemd: Startup finished in 1.992s (kernel) + 20.077s (initrd) + 44.664s (userspace) = 1min 6.735s.
May  4 18:17:56 slave2 ntpd_intres[653]: host name not found: master
May  4 18:21:08 slave2 systemd: Starting User Slice of root.
May  4 18:21:08 slave2 systemd-logind: New session 1 of user root.
May  4 18:21:08 slave2 systemd: Started Session 1 of user root.
May  4 18:21:08 slave2 systemd: Starting Session 1 of user root

匹配删除1-5行

[root@slave2 ~]# sed -e "1,5d" messages.log 
May  4 18:21:08 slave2 systemd: Created slice User Slice of root.
May  4 18:21:08 slave2 systemd: Starting User Slice of root.
May  4 18:21:08 slave2 systemd-logind: New session 1 of user root.
May  4 18:21:08 slave2 systemd: Started Session 1 of user root.
May  4 18:21:08 slave2 systemd: Starting Session 1 of user root.

3.1.3 替换
注意:如果没有g,则对首次出现Starting的字符串有效

[root@slave2 ~]# sed -e '1,10s/Starting/Ending/g' messages.log 
May  4 18:15:55 slave2 systemd: Ending Multi-User System.
May  4 18:15:55 slave2 systemd: Ending Update UTMP about System Runlevel Changes...
May  4 18:15:55 slave2 systemd: Started Update UTMP about System Runlevel Changes.
May  4 18:15:55 slave2 systemd: Startup finished in 1.992s (kernel) + 20.077s (initrd) + 44.664s (userspace) = 1min 6.735s.
May  4 18:17:56 slave2 ntpd_intres[653]: host name not found: master
May  4 18:21:08 slave2 systemd: Created slice User Slice of root.
May  4 18:21:08 slave2 systemd: Ending User Slice of root.
May  4 18:21:08 slave2 systemd-logind: New session 1 of user root.
May  4 18:21:08 slave2 systemd: Started Session 1 of user root.
May  4 18:21:08 slave2 systemd: Ending Session 1 of user root.

替换所有html标签对为空:

[root@slave2 ~]# cat test.html 
<html>
<head>oill page<\head>
<body><b>This<\b> is <b>oill's<\b> page.</body>
<\html>
[root@slave2 ~]# sed -e 's/<[^>]*>//g' test.html 

oill page
This is oill's page.

精确匹配替换:

[root@slave2 ~]# sed -e "s/\<systemd\>/sdfsdf/g" messages.log 
May  4 18:15:55 slave2 sdfsdf: Starting Multi-User System.
May  4 18:15:55 slave2 sdfsdf: Starting Update UTMP about System Runlevel Changes...
May  4 18:15:55 slave2 sdfsdf: Started Update UTMP about System Runlevel Changes.
May  4 18:15:55 slave2 sdfsdf: Startup finished in 1.992s (kernel) + 20.077s (initrd) + 44.664s (userspace) = 1min 6.735s.
May  4 18:17:56 slave2 ntpd_intres[653]: host name not found: master
May  4 18:21:08 slave2 sdfsdf: Created slice User Slice of root.
May  4 18:21:08 slave2 sdfsdf: Starting User Slice of root.
May  4 18:21:08 slave2 sdfsdf-logind: New session 1 of user root.
May  4 18:21:08 slave2 sdfsdf: Started Session 1 of user root.
May  4 18:21:08 slave2 sdfsdf: Starting Session 1 of user root.

3.1.4 插入
在第一行之前插入

[root@slave2 ~]# sed -e "1i hello" messages.log 
hello
May  4 18:15:55 slave2 systemd: Starting Multi-User System.
May  4 18:15:55 slave2 systemd: Starting Update UTMP about System Runlevel Changes...
May  4 18:15:55 slave2 systemd: Started Update UTMP about System Runlevel Changes.
May  4 18:15:55 slave2 systemd: Startup finished in 1.992s (kernel) + 20.077s (initrd) + 44.664s (userspace) = 1min 6.735s.
May  4 18:17:56 slave2 ntpd_intres[653]: host name not found: master
May  4 18:21:08 slave2 systemd: Created slice User Slice of root.
May  4 18:21:08 slave2 systemd: Starting User Slice of root.
May  4 18:21:08 slave2 systemd-logind: New session 1 of user root.
May  4 18:21:08 slave2 systemd: Started Session 1 of user root.
May  4 18:21:08 slave2 systemd: Starting Session 1 of user root.

在最后一行之后插入:

[root@slave2 ~]# sed -e "1ihello" -e "$ aworld" messages.log 
hello
May  4 18:15:55 slave2 systemd: Starting Multi-User System.
May  4 18:15:55 slave2 systemd: Starting Update UTMP about System Runlevel Changes...
May  4 18:15:55 slave2 systemd: Started Update UTMP about System Runlevel Changes.
May  4 18:15:55 slave2 systemd: Startup finished in 1.992s (kernel) + 20.077s (initrd) + 44.664s (userspace) = 1min 6.735s.
May  4 18:17:56 slave2 ntpd_intres[653]: host name not found: master
May  4 18:21:08 slave2 systemd: Created slice User Slice of root.
May  4 18:21:08 slave2 systemd: Starting User Slice of root.
May  4 18:21:08 slave2 systemd-logind: New session 1 of user root.
May  4 18:21:08 slave2 systemd: Started Session 1 of user root.
May  4 18:21:08 slave2 systemd: Starting Session 1 of user root.
world```

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: sed是一个强大的文本处理工具,常用于从标准输入或文件中读取文本,进行编辑和转换,并将输出写入标准输出或文件中。 以下是sed常用的命令选项: 1. -n:只显示经过sed编辑的行 2. -i:直接修改文件内容,不输出到终端 3. -e:允许多个命令一起执行 4. -f:从文件中读取sed命令进行处理 以下是sed常用的命令: 1. s:替换。语法为:s/要替换的内容/替换后的内容/g,其中g表示全局替换。 2. p:打印。将指定的行或所有行输出到终端。 3. d:删除。删除指定的行或所有行。 4. a:追加。在指定行后面添加新的内容。 5. i:插入。在指定行前面插入新的内容。 6. w:写入。将指定行写入到文件中。 举例说明: 1. 将文件中的所有"cat"替换为"dog":sed -i 's/cat/dog/g' file.txt 2. 只显示文件中包含“hello”的行:sed -n '/hello/p' file.txt 3. 删除文件中的第3行:sed -i '3d' file.txt 4. 在文件中第2行后面添加一行内容:“hello world”:sed -i '2a hello world' file.txt 5. 将文件中第1行替换为“hello”并保存到另一个文件中:sed '1s/.*/hello/' file.txt > newfile.txt ### 回答2: sed是一种常用的Linux命令,其全称为Stream Editor,用于对文本进行处理和转换。它可以在命令行中以各种方式对文件内容进行修改,包括替换、插入、删除、追加等操作。 sed的基本语法是`s/old/new/`,其中old表示待替换的字符串,new表示替换后的内容。sed命令会读取文件的内容,并对匹配到的old进行替换。如果需要对整个文件进行替换,则需要加上选项`-i`。 除了替换以外,sed还可以实现很多其他的文本操作。例如,通过`d`选项可以删除匹配到的行;通过`i`选项可以在指定行前插入文本;通过`a`选项可以在指定行后追加文本等。 另外,sed命令还可以使用正则表达式来进行模式匹配。通过在替换语句中使用正则表达式,可以对符合特定模式的字符串进行批量替换。 总之,sed是一种非常强大和灵活的文本处理工具,可以方便地对文件内容进行修改和转换,提高工作效率。熟练掌握sed命令可以帮助我们更好地处理和编辑文本文件。 ### 回答3: sed(Stream Editor)是Linux中常用的文本处理工具之一。它可以对文本进行流式编辑,具体操作包括查找、删除、替换、插入行或字符等。 使用sed命令的基本语法为: ``` sed [选项] '动作' 文件名 ``` 其中,选项可以包括: - -n:只显示或处理特定行; - -e:指定要执行的动作; - -f:从指定文件中读取动作。 动作部分可以包括: - 数字n:表示打印第n行; - p:打印匹配行; - d:删除匹配行; - s/old/new/:查找并替换文本; - a\text:在匹配行后插入文本; - i\text:在匹配行前插入文本。 以下是一些常用的sed命令示例: - 打印文件内容: ``` sed 'p' file.txt ``` - 删除匹配行: ``` sed '/pattern/d' file.txt ``` - 查找并替换文本: ``` sed 's/old/new/' file.txt ``` - 打印指定行数: ``` sed -n 'n' file.txt ``` - 在匹配行后插入文本: ``` sed '/pattern/a\text' file.txt ``` - 在匹配行前插入文本: ``` sed '/pattern/i\text' file.txt ``` 通过灵活运用sed命令,我们可以轻松地对文本文件进行各种编辑操作,提高工作效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值