Shell编程4_文本处理三剑客(sed)

文本处理三剑客(sed)

1.sed介绍

这里写图片描述

2.定址

可以通过定址来定位你所希望编辑的行,该地址用数字构成,用逗号分隔的两个行数表示以这两行为起止的行的范围(包括行数表示的那两行)。如 1,3 表示 1,2,3 行,美元符号($)表示最后一行。范围可以通过数据,正则表达式或者二者结合的方式确定

3.sed命令的格式

调用 sed 命令有两种形式:
sed [options] ‘command’ file(s)
sed [options] -f scriptfile file(s)

4.sed 对字符的处理

p    显示
d    删除
a    添加
c    替换
w    写入
i    插入
4-1.p:显示模式
sed -n '/\:/p' fstab      显示fsatb中:行
sed -n '/UUID$/p' fstab   显示fsatb中UUID结尾行
sed -n '/^UUID/p' fstab   显示fsatb中UUID开始行
sed -n '3,6p' fstab       显示fsatb中36行
sed -n '3,6!p' fstab      显示fsatb中除了3-6行的其他行行
不加-n重复显示

这里写图片描述

4-2.d:删除模式
sed '/^UUID/d' fstab      删除fstab中以UUID开始的行
sed '/UUID$/d' fstab      删除fstab中以UUID结尾的行
sed '1,6d'  fstab         删除fstab中1-6行
sed '/UUID/!d' fstab      删除fstab中不是UUID的行
sed '4,6!d' fstab         删除fstab中不是4-6

这里写图片描述

4-3.a:添加模式
sed '/^UUID/a \hello' sed fstab 追加hello到fstab以UUID开头的行后 
sed '/UUID$/a hello\n world' sed fatab 增加换行 

这里写图片描述

4-4.c:更改模式
sed '/^UUID/c hello' fstab          对于fatab把符合UUID开头的行替换hello

这里写图片描述

4-5.w:写入模式
sed ‘/^UUID/w /tmp/fstab.txt’ /etc/fstab 
                         (把/etc/fstab 中 UUID 开头的行保存到/tmp/fstab 中) 
sed -n/^UUID/w /tmp/fstab.txt’ /etc/fstab 
sed '/^UUID/=' fstab 显示fstab中以UUID开头的行数和内容,会显示其他不符合条件的行内容 
sed -n '/^UUID/=' fstab 显示fstab中以UUID开头的行数,只显示符合条件的行号和内容 
sed ‘6r /etc/issue’ /etc/fstab (把/etc/issue 文件内容放置 
到/etc/fstab 中的第六行) 
sed -e 的用法:将下一个字符串解析为 sed 编辑命令 

把/etc/fstab中符合以UUID开头的行保存到/mnt/file1

(1)把/etc/fstab 中 UUID 开头的行保存到/tmp/fstab

sed ‘/^UUID/w /tmp/fstab.txt’ /etc/fstab

这里写图片描述

(2)查看/etc/fstab中以UUID行是第几行

sed '/^UUID/=' fstab 
sed '/^UUID/=' fstab -n ##-n表示只输出符合条件的行号
4-6.i:插入模式
sed '/^UUID/i hello' sed fstab 把hello插入到fstab以UUID开头的行前 
sed '/^UUID/i hello\nworld' sed fstab 把hello插入到fstab以UUID开头的行前下一行插入world

这里写图片描述

5.sed的其他用法

5-1.文本的替换

sed 's/#/\*/g' fstab 把fstab中所有的#替换为* 
sed 's/\//+/g' fstab 把fstab中所有的/替换为+ 
sed 's@/@+@g' fstab 把fstab中所有的/替换为+ 
sed '2s/:/**/g' passwd 把passwd中第2行的:全部替换为** 
sed '3,5s/:/#/g' passwd 把passwd中3-5行内容中的:全部替换为# 
sed '/adm/,/lp/s/:/-/g' passwd 把passwd中/adm/开始的行到/lp/开始的行,这两行之间的所有行中的:替换为- 
sed 's/:/##/' passwd 把passwd中每行的第一个:替换为## 
sed 's/:/##/g' passwd 把passwd中全文的:替换为##
5-2.输出内容的调整
sed 'G' file 每一行后加以行空格行 
sed '$!G' file每一行后加以行空格行除了在最后一行 
sed '=' file 每一行都加行号在内容上边 
sed '=' file | sed 'N;s/\n//' 每一行都加行号在内容前边 
sed -n '$p' file 显示file的最后一行内容 

sed ‘G’ file实验效果每一行后加以行空格行 

猜你喜欢

转载自blog.csdn.net/zwhzwh0228/article/details/80831117