SHELL编程四剑客之Sed工具

SED是一个非交互式文本编辑器,它可对文本文件和标准输入进行编辑,标准输入可以来自键盘输入、文本重定向、字符串、变量,甚至来自于管道的文本。

Sed工具在处理文本时默认把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space)。如果要将变化写入磁盘、文件需要使用-i参数。

sed命令语法参数格式:sed 参数 ‘sed内置命令字符‘ 输入文件;

一、sed 命令的参数选项及说明

参数选项 解释说明
-n 取消默认的sed的输出,常与sed内置命令的p连用
-i 直接修改文件内容,而不是输出到终端。如果不使用-i选项,则sed只是修改内存中的数据,并不会影响磁盘上的文件
-e 如果有多个sed内置命令,需要使用-e参数,使用情景如下

情景1:sed -e ‘sed内置命令’ -e ‘sed内置命令’ haha.txt
情景2:sed -e ‘sed内置命令;sed内置命令’ haha.txt sed内置命令用分号隔开
二、sed内置命令字符的功能说明

sed的内置命令字符 解释说明
a\ 在当前行后添加一行或多行
c\ 用新文本修改(替换)当前行中的文本
i\ 在当前行前插入文本
d 删除行
p 打印行
匹配所匹配的内容以外的所有内容
s///g或者s###g 用一个字符串替换另外一个字符串
s///G或者s###G 在一个字符串后面追加另外一个字符串
N 将当前读入行的下一行读取到当前的模式空间。
y 将一个字符替换成另外一个字符

三、sed的正则表达式
同grep的正则表达式,大同小异,见下:
https://blog.csdn.net/weixin_44571270/article/details/104071841

例题:匹配ip地址的sed命令

echo 172.16.177.76|sed -n '/^\([0-9]\{1,3\}\.\)\{3\}\([0-9]\{1,3\}\)$/p'

四、实战演练
(1)替换jfedu.txt文本中old为new:
sed ‘s/old/new/g’ jfedu.txt
(2)打印jfedu.txt文本第一行至第三行:
sed -n ‘1,3p’ jfedu.txt
(3)打印jfedu.txt文本中第一行与最后一行:
sed -n ‘1p; p j f e d u . t x t 4 j f e d u . t x t s e d 1 , 3 d j f e d u . t x t s e d / j f e d u / , p' jfedu.txt (4)删除jfedu.txt第一行至第三行、删除匹配行至最后一行: sed '1,3d' jfedu.txt sed '/jfedu/, d’ jfedu.txt
(5)删除jfedu.txt最后6行及删除最后一行:
for i in seq 1 6;do sed -i ‘ d j f e d u . t x t ; d o n e s e d d' jfedu.txt ;done sed ' d’ jfedu.txt
(6)删除jfedu.txt最后1行:
sed ' d j f e d u . t x t 7 j f e d u . t x t j f e d u w o r d a s e d / j f e d u / a w o r d j f e d u . t x t 8 j f e d u . t x t j f e d u w o r d i s e d / j f e d u / i w o r d j f e d u . t x t 9 j f e d u . t x t t e s t w o r d d' jfedu.txt (7)在jfedu.txt查找jfedu所在行,并在其下一行添加word字符,a表示在其下一行添加字符串: sed '/jfedu/aword' jfedu.txt (8)在jfedu.txt查找jfedu所在行,并在其上一行添加word字符,i表示在其上一行添加字符串: sed '/jfedu/iword' jfedu.txt (9)在jfedu.txt查找以test结尾的行尾添加字符串word, 表示结尾标识,&在Sed中表示添加:
sed ‘s/testKaTeX parse error: Expected 'EOF', got '&' at position 2: /&̲word/g' jfe…/&./g’ jfedu.txt
(12)多个sed命令组合,使用分号“;”分割:
sed -e '/www.jd.com/s/^/&1./;s/www.jd.comKaTeX parse error: Expected 'EOF', got '&' at position 2: /&̲./g' jfedu.txt…WEBSITE/g” jfedu.txt
(14)修改Selinux策略enforcing为disabled,查找/SELINUX/行,然后将其行enforcing值改成disabled、!s表示不包括SELINUX行:
sed -i ‘/SELINUX/s/enforcing/disabled/g’ /etc/selinux/config
sed -i ‘/SELINUX/!s/enforcing/disabled/g’ /etc/selinux/config
(15)合并上下两行,也即两行合并:
sed ‘N;s/\n/ /’ jfedu.txt

发布了162 篇原创文章 · 获赞 142 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_44571270/article/details/104071845
今日推荐