shell六之sed 用法的

Posted 遙遙背影暖暖流星

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell六之sed 用法的相关的知识,希望对你有一定的参考价值。

一、sed工具概述

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

1、sed 的工作流程主要包括读取、执行和显示三个过程。

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

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

2、常见选项

-n 只匹配处理的行
-e 执行多个sed指令·
-f 运行脚本
-i 编辑文件内容
-i.bak 编辑的同时创造.bak的备份·

-r 使用扩展的正则表达式。

(2)

a 在当前行上面插入文件
i 在当前行下面插入文件
c 整行替换。
p 打印匹配行
d 删除

r/R 读取文件/一行·
w另存
s 查找替换

y字符转换
h拷贝模板块的内容到内存中的缓冲区。
H追加模板块的内容到内存中的缓冲区。·
g 获得内存缓冲区的内容,并替代当前模板块中的文本。”
G 获得内存缓冲区的内容,并追加到当前模板块文本的后面
D 删除\\n之前的内容·
P 打印\\n之前的内容,

(3)sed匹配字符集

^ 匹配行开始,如:/^sed/匹配所有以sed开头的行。
$ 匹配行结束,如:/sed$/匹配所有以sed结尾的行。·
.匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。
* 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。

二、示例

1,s 替换标记
[root@localhost ~]# sed 's/root/lv74134/' zz.txt   
#s 只替换的第一个,将第一个root 替换成lv74134
lv74134:x:0:0:root:/root:/bin/bash
2、g 全面替换
[root@localhost ~]# sed 's/root/lv74134/g' zz.txt

lv74134:x:0:0:lv74134:/lv74134:/bin/bash
3、替换内容本身有/符号
[root@localhost ~]# sed 's#/bin/bash#/sbin/nologin#' zz.txt
#替换内容本身有/符号时,利用#代替s/中的/
root:x:0:0:root:/root:/sbin/nologin
4[root@localhost ~]# sed 's#/bin/bash#/sbin/nologin#g' zz.txt
#全部替换
5、单行替换
[root@localhost ~]#  sed '1s/root/1111111111/g' zz.txt
#替换第一行
1111111111:x:0:0:1111111111:/1111111111:/bin/bash

[root@localhost ~]#  sed '1,10s/root/1111111111/g' zz.txt
#替换第1行到第10行

[root@localhost ~]#  sed '1,$s/root/1111111111/g' zz.txt
#替换第1行到最后一行


[root@localhost ~]#  sed -n '1,10s/root/1111111111/g' zz.txt
#替换第1行和第10行


1、删除行
sed '2,10d' zz.tex
#删除第2行到第10行

sed '/192.168/d' zz,txt
#删除含有该字符段的行

2、添加行
sed '10i\\aaaa' zz.tex
#第10 行前面添加一行aaaa


sed '10a\\aaa' zz.tex
# 在第10行后面添加行aaaa

sed '$a\\1111111'  zz.tex
#在最后一行后面添加

1、改写
sed '4c\\192.168.1.100 ' zz.tex
#对第四行的内容进行删除并改写为\\后面内容

sed '4,$c\\192.168.1.100 ' zz.tex
#对第四行的后面的内容全部删除,并改写为\\后面内容

sed '/root/c\\192.168.1.100' zz.tex

#将包括含有root的行改成额192.168.1.100


2、打印和输入文本内容
sed -n '2p' zz.tex
#只显示第2行内容

sed -n '/root/w jj.tex' zz.tex
#将含有root的行输出保存在一个文件中
1、修改对原文件生效
sed -i sed 's#/bin/bash#/sbin/nologin#g' zz.txt
# 修改对原文件生效
2、修改时备份
sed -i.bak sed 's#/bin/bash#/sbin/nologin#g' zz.txt
# 修改对原文件前,生成了一个.bak的备份文件

以上是关于shell六之sed 用法的的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本--sed的用法

shell脚本——sed详细用法

shell中sed命令的用法

shell中的sed用法

shell 文件内容替换 sed用法

shell sed 的一些用法