我是靠谱客的博主 满意电脑,这篇文章主要介绍Shell编程之Sed一、Sed概述二、Sed格式三、Sed脚本格式四、搜索替代,现在分享给大家,希望可以做个参考。

目录

一、Sed概述

二、Sed格式

1.命令格式

2. 基本用法

2.1 默认将输入内容打印出来

2.2 查看文件内容

2.3 支持重定向

2.4 支持管道

三、Sed脚本格式

1. 脚本格式

2. 实例展示

2.1 关闭自动打印

2.2 输出行

2.3 还支持正则表达式 指定包含符合内容的行

2.4 -d 选项删除

2.5 -i 选项

2.6 追加替换

2.7 -e 多点编辑

四、搜索替代

1. 替换 

2. 分组


一、Sed概述

Sed 即 Stream EDitor,和 vi 不同,sed是行编辑器

sed(Stream EDitor)是一个强大而简单的文本解析转换工具,可以读取文本,并根据指定的条件对文本内容进行编辑(删除、替换、添加、移动等),最后输出所有行或者仅输出处理的某些行。sed也可以在无交互的情况下实现相当复杂的文本处理操作,被广泛应用于Shell脚本中,用以完成各种自动化处理任务。 sed 的工作流程主要包括读取、执行和显示三个过程。

  • 读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space)。

  • 执行:默认情况下,所有的 sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则 sed 命令将会在所有的行上依次执行。

  • 显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。

在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。

注意:默认情况下所有的 sed 命令都是在模式空间内执行的,因此输入的文件并不会发生任何变化,除非是用重定向存储输出。

二、Sed格式

1.命令格式

通常情况下调用 sed 命令有两种格式,如下所示。其中,“参数”是指操作的目标文件, 当存在多个操作对象时用,文件之间用逗号“,”分隔
scriptfile 表示脚本文件,需要用“-f” 选项指定,当脚本文件出现在目标文件之前时,表示通过指定的脚本文件来处理输入的目标文件。

sed [选项] '操作' 参数

sed [选项] -f scriptfile 参数
常用选项:
-n 不输出模式空间内容到屏幕,即不自动打印
-e 多点编辑(表示用指定命令或者脚本来处理输入的文本文件,只有一个编辑命令时可省略)
-f FILE 从指定文件中读取编辑脚本
-r, -E 使用扩展正则表达式
-i.bak 备份文件并原处编辑
-s           将多个文件视为独立文件,而不是单个连续的长文件流

2. 基本用法

2.1 默认将输入内容打印出来

2.2 查看文件内容

2.3 支持重定向

2.4 支持管道

三、Sed脚本格式

1. 脚本格式

'地址+命令'组成


1. 不给地址:对全文进行处理(比如行号)

2. 单地址:
   #:指定的行,$:最后一行
   /pattern/:被此处模式所能够匹配到的每一行

3. 地址范围:
   #,#     #从#行到第#行,3,6 从第3行到第6行
   #,+#   #从#行到+#行,3,+4 表示从3行到第7行
   /pat1/,/pat2/    第一个正则表达式和第二个正则表达式之间的行
   #,/pat/  从#号行为开始找到 pat为止 
   /pat/,#  找到#号个pat为止

4. 步进:~
     1~2 奇数行
     2~2 偶数行
     
#常用操作命令
p 打印当前模式空间内容,追加到默认输出之后
Ip 忽略大小写输出
d 删除模式空间匹配的行,并立即启用下一轮循环
a []text 在指定行后面追加文本,支持使用n实现多行追加
i []text 在行前面插入文本
c []text 替换行为单行或多行文本(替换,将选定行替换为指定内容)
w file 保存模式匹配的行至指定文件
r file 读取指定文件的文本至模式空间中匹配到的行后
= 为模式空间中的行打印行号
! 模式空间中匹配行取反处理
q           结束或退出sed
y 字符转换
s 替换,替换指定字符,格式:“行范围 s/旧字符串/新字符串”

2. 实例展示

2.1 关闭自动打印

2.2 输出行

 

2.3 还支持正则表达式 指定包含符合内容的行

[root@localhost ~]#sed -n '/root/p' /etc/passwd
##将包含root的行打印出来   /root(需要匹配的内容)/p(打印)  文件名  
###与 grep root /etc/passwd 功能相同
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]#sed '/root/p' /etc/passwd   输出包含root的行
###自动打印需要关闭否则会全部打印
root:x:0:0:root:/root:/bin/bash
省略多行。。。。。。。。
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin

想显示b开头 和f开头中间的行,可以这样进行指定
[root@localhost ~]#sed -n '/^b/,/^f/p' /etc/passwd
###     基本格式     '/表达式1/,/表达式2/p' (不要忘记打印)p  文件名
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

####匹配方式   如果有多个复合条件的表达式
先开始找b开头一直找到f开头
然后再重新找b开头,一找到f开头,没有f开头就全显示
重复循环

2.4 -d 选项删除

sed '/cross/d' /etc/passwd  	#删除包含 cross 的行,原本的第 8 行被删除;如果要删除不包含 cross 的行,用!符号表示取反操作, 如'/cross/!d'

sed '/^[a-z]/d' /etc/passwd     #删除以小写字母开头的行

sed '/.$/d' /etc/passwd        #删除以.结尾的行

2.5 -i 选项

-i   与  -i.bak 			(i. 可以实现修改的同时,备份一个原文件,例如i.bak 处理 test文件,会备份一个test.bak文件。)
修改文件  修改文件前先备份

2.6 追加替换

-a 往后追加 -i 往前追加内容 -c 替换 内容

2.7 -e 多点编辑

四、搜索替代

s/pattern/string/修饰符 查找替换,支持使用其它分隔符,可以是其它形式:s@@@,s###
替换修饰符:
g 行内全局替换
p 显示替换成功的行
w   /PATH/FILE 将替换成功的行保存至文件中
I,i   忽略大小写

1. 替换 

sed 's/the/THE/' /etc/passwd	  	#将每行中的第一个the 替换为 THE

sed 's/the/THE/2' /etc/passwd	      	#将每行中的第 2 个the替换为 THE

sed 's/the/THE/g' /etc/passwd  	#将文件中的所有the 替换为 THE

sed 's/the//g' /etc/passwd    	  	#将文件中的所有the 删除(替换为空串)

sed 's/^/#/' /etc/passwd	      	#在每行行首插入#号

sed '/the/s/^/#/' /etc/passwd	  	#在包含the 的每行行首插入#号

sed '3,5s/the/THE/g' /etc/passwd	#将第 3~5 行中的所有 the 替换为 THE

2. 分组

[root@localhost ~]#echo 123abcxyz |sed -r 's/(123)(abc)(xyz)/1/'
##分组 s//代表查找替换  ()代表分组    1 代表留下的组
123

最后

以上就是满意电脑最近收集整理的关于Shell编程之Sed一、Sed概述二、Sed格式三、Sed脚本格式四、搜索替代的全部内容,更多相关Shell编程之Sed一、Sed概述二、Sed格式三、Sed脚本格式四、搜索替代内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部