SHELL脚本学习(十)初识 sed编辑器

2024-06-21 13:52

本文主要是介绍SHELL脚本学习(十)初识 sed编辑器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、sed 编辑器

 sed 编辑器被称作流编辑器,根据命令来处理数据流中的数据。
这些数据要么从命令行输入,要么保存在命令文本文件中。
sed编辑器可以执行下列操作:

  1. 从输入中读取一行数据
  2. 根据所提供的命令匹配数据
  3. 按照命令修改数据流中的数据
  4. 将新的数据输出到STDOUT

sed 命令格式如下:

sed options script file

sed命令行选项
选项描述
-e commands在处理输入时,加入额外的sed命令
-f file在处理输入时,将file中的命令加入到已有的命令中
-n不产生命令输出,使用p命令完成输出

script指定了应用于流数据的单个命令。如果想使用多个命令可以使用 -e或-f选项。

1.1 在命令行中定义编辑器命令

默认情况下sed会将指定的命令应用于STDIN输入流中
。因此,可以直接将数据通过管道传给sed编辑器进行处理。例:

$ echo "I have a apple" | sed "s/apple/orange/"
I have a orange$ cat < file1
I have a apple
I have a apple
I have a apple
I have a apple$ sed "s/apple/orange/" ./file1
I have a orange
I have a orange
I have a orange
I have a orange

s:替换命令。会用第二个字符串(orange)替换第一个字符串(apple)。

1.2 在命令行中使用多个命令

如果要在sed命令行中使用多个命令,可以使用-e选项。
命令之间以分号(;)分隔,并且命令末尾和分号之间不能有空格。

$ cat <file1
hello world
hello world
ubuntu@VM-8-14-ubuntu:~$ sed -e 's/hello/first/; s/world/second/' file1
first second
first second
1.3 从文件中读取编辑器命令

如果有大量需要执行的命令,那么把它们放到文件中会更方便一些。
可以使用sed命令中的-f选项指定文件.

$ cat <file1
hello world
hello world$ cat < sed_cmd_file
s/hello/first/
s/world/second/$ sed -f sed_cmd_file file1
first second
first second

二、sed 编辑器基础命令

成功使用sed编辑器的关键在于掌握各式各样的命令和格式。本节介绍一些可以运用于脚本的基础命令和功能。

2.1 更多的替换项

看一个例子:

$ echo "test test" | sed 's/test/hello/'
hello test

默认情况下sed命令只替换第一个匹配的单词。如果想全部匹配可以使用替换标志g

$ echo "test test" | sed 's/test/hello/g'
hello hello
2.1.1 替换标志

格式:s/pattern/replacement/flag

4种可用的替换标志
标志描述
数值指出要替换第几处匹配
g替换全部匹配
p打印出替换后的行
w file将替换的结果写入文件

依次举例:


#数值
$ echo "test test" | sed 's/test/hello/1'
hello test$ echo "test test" | sed 's/test/hello/2'
test hello#g
$ echo "test test" | sed 's/test/hello/g'
hello hello#p
$ echo "test test" | sed -n 's/test/hello/p'
hello test#w file
$ echo "test test" | sed  -n 's/test/hello/w sedout'
$ cat<sedout
hello test
2.1.2 使用地址

默认情况下,sed的命令会作用于所有文本行。如果只想让命令作用于某一行或某几行,则需要使用行寻址。

两种寻址方式:

  1. 以数字形式表示的行区间
  2. 匹配行内文本的模式

格式

[address]command

address{
command1
command2

}

$ cat<file1
hello world
hello world
hello world
hello wordl
hello world
2.1.2.1 以数字形式寻址

将file1文件中的第3行的world替换成hello

$ sed '3s/world/hello/' file1
hello world
hello world
hello hello
hello wordl
hello world

将3~5行的hello替换成world

$ sed '3,5s/hello/world/' file1
hello world
hello world
world world
world wordl
world world$ sed '3,$s/hello/world/' file1
hello world
hello world
world world
world wordl
world world

$ 是最后一行。

2.1.2.2 使用文本模式过滤

格式:

/pattern/command


$ cat < file1
test line1
test line2
test line3
$ sed -n '/2/p' file1
test line2$ sed -n '/line2/s/test/TEST/p' file1
TEST line2
2.1.2.3 命令组

如果希望在单行中执行多条命令,可以用花括号将其组合在一起。
例:

$ sed -n '2{s/test/TEST/p
s/line/ /p}' file1
TEST line2
TEST  2
2.2 删除行

d:删除命令。

例:


$ sed '2d' file1
test line1
test line3$ sed '/line1/d' file1
test line2
test line3
2.3 插入和附加文本
  • 插入(insert)(i)命令会在指定行前增加一行。
  • 附加(append)(a)命令会在指定行后增加一行。
    命令格式

sed ‘[address]command
新行1
新行2
…’


$ cat <file1
test line1
test line2
test line3$ sed '2i\test line new' file1
test line1
test line new
test line2
test line3$ sed '2a\test line new' file1
test line1
test line2
test line new
test line3
2.4 修改行

修改命令(c)允许修改数据流中整行文本的内容。
格式:

sed ‘[address]c\
新行’ file

$ cat <file1
test line1
test line2
test line3$ sed '3c\
> hello shell' file1
test line1
test line2
hello shell$ sed '/line1/c\
hello shell' file1
hello shell
test line2
test line3
2.5 转换命令

转换命令(y)是唯一一个可以处理单个字符的sed命令

[address]y/inchars/outchars

$ cat <file1
test line1
test line2
test line3$ sed 'y/t/L/' file1
LesL line1
LesL line2
LesL line3$ sed '3y/t/L/' file1
test line1
test line2
LesL line3
2.6 使用sed 处理文件
2.6.1写入文件

写入命令(w)用来向文件中写入数据。
命令格式:

[address]w file
file 可以是相对路径或绝对路径。但必须有该文件的写权限。

$ sed -n '1,2w sedout' file1
$ cat < sedout
test line1
test line2
2.6.2 从文件读取数据

读命令(r)允许将独立文件中的数据插入到数据流中。
格式:

[address]r file

$ sed '2r Sedin' file1
test line1
test line2
insert line1
insert line2
test line3

这篇关于SHELL脚本学习(十)初识 sed编辑器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1081400

相关文章

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

通过Python脚本批量复制并规范命名视频文件

《通过Python脚本批量复制并规范命名视频文件》本文介绍了如何通过Python脚本批量复制并规范命名视频文件,实现自动补齐数字编号、保留原始文件、智能识别有效文件等功能,听过代码示例介绍的非常详细,... 目录一、问题场景:杂乱的视频文件名二、完整解决方案三、关键技术解析1. 智能路径处理2. 精准文件名

web网络安全之跨站脚本攻击(XSS)详解

《web网络安全之跨站脚本攻击(XSS)详解》:本文主要介绍web网络安全之跨站脚本攻击(XSS)的相关资料,跨站脚本攻击XSS是一种常见的Web安全漏洞,攻击者通过注入恶意脚本诱使用户执行,可能... 目录前言XSS 的类型1. 存储型 XSS(Stored XSS)示例:危害:2. 反射型 XSS(Re

Python3脚本实现Excel与TXT的智能转换

《Python3脚本实现Excel与TXT的智能转换》在数据处理的日常工作中,我们经常需要将Excel中的结构化数据转换为其他格式,本文将使用Python3实现Excel与TXT的智能转换,需要的可以... 目录场景应用:为什么需要这种转换技术解析:代码实现详解核心代码展示改进点说明实战演练:从Excel到

Python脚本实现图片文件批量命名

《Python脚本实现图片文件批量命名》这篇文章主要为大家详细介绍了一个用python第三方库pillow写的批量处理图片命名的脚本,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言源码批量处理图片尺寸脚本源码GUI界面源码打包成.exe可执行文件前言本文介绍一个用python第三方库pi

shell脚本自动删除30天以前的文件(最新推荐)

《shell脚本自动删除30天以前的文件(最新推荐)》该文章介绍了如何使用Shell脚本自动删除指定目录下30天以前的文件,并通过crontab设置定时任务,此外,还提供了如何使用Shell脚本删除E... 目录shell脚本自动删除30天以前的文件linux按照日期定时删除elasticsearch索引s

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

10个Python自动化办公的脚本分享

《10个Python自动化办公的脚本分享》在日常办公中,我们常常会被繁琐、重复的任务占据大量时间,本文为大家分享了10个实用的Python自动化办公案例及源码,希望对大家有所帮助... 目录1. 批量处理 Excel 文件2. 自动发送邮件3. 批量重命名文件4. 数据清洗5. 生成 PPT6. 自动化测试

使用Java实现一个解析CURL脚本小工具

《使用Java实现一个解析CURL脚本小工具》文章介绍了如何使用Java实现一个解析CURL脚本的工具,该工具可以将CURL脚本中的Header解析为KVMap结构,获取URL路径、请求类型,解析UR... 目录使用示例实现原理具体实现CurlParserUtilCurlEntityICurlHandler

10个Python Excel自动化脚本分享

《10个PythonExcel自动化脚本分享》在数据处理和分析的过程中,Excel文件是我们日常工作中常见的格式,本文将分享10个实用的Excel自动化脚本,希望可以帮助大家更轻松地掌握这些技能... 目录1. Excel单元格批量填充2. 设置行高与列宽3. 根据条件删除行4. 创建新的Excel工作表5