当前位置:网站首页>xshell (sed command)

xshell (sed command)

2022-08-10 21:52:00 Guannan cattle x people

在Linux/UNIX 系统中包含很多种类的文本处理器或文本编辑器,其中包括我们之前学习过的VIM 编辑器与grep 等.而 grep,sed,awk 更是Shell 编程中经常用到的文本处理工具, 被称之为Shell 编程三剑客

sed概述及工作原理

sed 工具

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

sed 依赖于正则表达式

sed 的工作流程

主要包括读取执行显示三个过程.

读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space).
执行:默认情况下,所有的 sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则 sed 命令将会在所有的行上依次执行.
显示:发送修改后的内容到输出流.在发送数据后,模式空间将会被清空.
在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完.

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

 sed 命令常见用法

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

sed 命令格式 

sed [选项] '操作' 参数

常见的 sed 命令选项 

-e表示用指定命令或脚本来处理输入的文本文件
-f表示用指定的脚本文件来处理输入的文本文件
-h或--help 显示帮助
-nIndicates that the result after processing is displayed
-i直接编辑文本文件
-i.bakBackup text files
-r,-E使用扩展正则表达式
-s将多个文件视为独立文件,而不是单个连续的长文件流

sed命令的常用操作 

“操作”用于指定对文件操作的动作行为,也就是 sed 的命令

a增加,在当前行下面增加一行指定内容
c替换,将选定行替换为指定内容
d删除,删除选定的行
i插入,在选定行上面插入一行指定内容
p打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容
s替换,替换指定字符
y字符转换

案例 

以test.txt文件内容为例

打印文本内容

 打印显示第2行

打印显示第1行到第5行内容 

 All odd lines of output file content

输出所有偶数行 

 输出第10行至文件尾之间的偶数行 

 显示第2行内容

/the/ 包含  显示包含the的行

打印显示第4row starts withthe的行

打印包含the的行号

 Display contains with PI开头或以The开头的行

 Displayed with 数字0-9结尾的行 

Printing shows containswood的行wood是整体

  nl Print out the number of lines in the file(空行不显示)

 显示行号,并删除第4行

 删除第1-5行,并显示行号 

删除包含有the的行并显示行号 

查看文件内容,and displays Delete witha-z开头的行 

 Remove blank lines and display

 删除以 . 结尾的行 

 

替换符合条件的文本 

 在使用 sed 命令进行替换操作时需要用到 s(字符串替换)、c(整行/整块替换)、y
(字符转换)命令选项,常见的用法如下所示.

 将每行中的第一个the替换成大写THE

 将/etc/passwd下/bin/bash 替换成/sbin/nologin    

打印文件内容,将第2行bin替换成zmj并将行尾的/named替换成zmj

 将第2行中的第2个l 替换成L 

  the contents of the filethe 替换成THE  g:全局替换

 

 Global replacement will beoReplace with blank lines

 sed -i.bak Back up modified files

 

 

 sed -i 修改文件内容,关闭增强功能

 迁移符合条件的文本

在使用 sed 命令迁移符合条件的文本时,常用到以下参数

H复制到剪贴板
g  G将剪贴板中的数据覆盖/追加至指定行
w保存为文件
r读取指定文件
a追加指定内容
l  i忽略大小写

将包含theCopy and paste the line to the end of the line 

将第1行至第5Copy and paste the line to the first14行后

 

 将包含theline specified to2.txt文件中

 

  Add hostname to includetheunder each line

 在第7Append the specified content to the bottom of the linenb

  在包含theAppend the specified content below the linezmj

  在第3Append the specified content below the line \n:表示换行

 使用脚本编辑文件

使用 sed 脚本将多个编辑指令存放到文件中(每行一条编辑指令)

将第1-6Copy and paste the line to the first16行后

 通过“-f”选项来调用.例如执行以下命令即可将第 1~5 行内容转移至第 16 行后.

 

 sed 直接操作文件示例

 编写一个脚本,用来调整 vsftpd 服务配置,要求禁止匿名用户,但允许本地用户(也允许写入)

 

 总结

 sed工具,It is a powerful and simple text parsing conversion tool,可以读取文本,并根据指定的条件对文本内容进行编辑(删除、替换、添加、移动等),最后输出所有行或者仅输出处理的某些行.And some cases let us use it more proficientlysed工具.

原网站

版权声明
本文为[Guannan cattle x people]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/222/202208102122373653.html