shell四大天王之 sed 学习反思
sed是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有改变,除非你使用重定向
它被设计在下列三种情况下发挥作用:
1) 编辑那些对舒适的交互式编辑而言太大的文件.
2) 在编辑命令太复杂而难于在交互模式下键入的时候编辑任何大小的文件.
3) 要在对输入的一趟扫描中有效的进行多个‘全局’(global)编辑函数。
因为每次只把输入的某些行驻留在内存中,并且不使用
基本正则表
扩展正则表
在支持的情况下优先使用扩展正则
sed
用法1: sed [参数] '[行号]/[正则匹配]/[指令]' [目的文件] (一般用于查找或删除文本)
用法2: sed [参数] 's/old/new/(g|[1-n])' [目的文件] (用于替换特定文本)
用法3: sed [参数] '[行号][指令] [文本]' [目的文件] (用于修改查看替换某一行)
参数:
-n 取消自动打印模式空间(输出时屏蔽干扰信息)
-r 在脚本中使用扩展正则表达式
-i 写入修改(练习时不使用)
...
--help display this help and exit
指令:
p 输出文本 (和-n参数连用)
d 删除文本
i 在目标行之前插入一行文本
a 在目标行之后插入一行文本
c 替换目标行文本
基础操作
指令:p 输出文档内容(一般会-n)
sed -n '1p' user //输出第1行
sed -n '2,4p' user //输出2~4行
sed -n '3p;5p' user //输出3行和5行
sed -n '2,+2p' user //输出第2行,以及后面2行
sed -n '1~2p' user //查看奇数行
sed -n '2~2p' user //查看偶数行
sed的定址符可以使用正则表达式, 在 / / 中间填写
sed -n '/root/p' user //查看有root的行
sed -n '/^root/p' user //查看以root开头的行
sed -n '=' user //看所有行的行号
sed -n '$=' user //看最后一行的行号
指令:d 删除行,使用方式和指令p基本一致,注意无需加 -n选项
sed '1d' user //删除第1行
s 替换
s/old/new/
s///
sed 's/2017/XXXX/' test //替换文档中所有行的第1个2017
sed '2s/2017/XXXX/' test //替换第2行的第1个2017
sed '2s/2017/XXXX/2' test //替换第2行的第2个2017
sed '3s/2017/XXXX/3;3s/2017/XXXX/2' test //替换第3行的第三个2017, 再替换第3行的第2个2017
sed 's/2017/XXXX/g' test //替换所有2017
sed 's/2017//' test //将所有行的第1个2017替换为空,等于删除
sed -n 's/root//p' /etc/passwd //替换passwd文件中所有行的第一个root为空,并显示替换的行
尝试使用sed替换功能将 /bin/bash 替换为 /sbin/sh
sed 's//bin/bash//sbin/sh/' user //常规方式更换,报错
sed 's/\/bin\/bash/\/sbin\/sh/' user //使用转义符号屏蔽冲突的斜杠, 可以成功,但麻烦
sed 's!/bin/bash!/sbin/sh!' user //更改替换符号为!
sed 's(/bin/bash(/sbin/sh(' user //或用(
高级操作(运用 ' () ')
[root@Proxy ~]#cat test.txt
Ni Hao Shijie
Hello Changsha
一. 练习
删除每行第二个和最后一个字符
sed 's/.//2;s/.$//' test.txt
二. 练习
将每行第一个字符和最后一个字符互换
sed -r 's/(^.)(.*)(.$)/\3\2\1/' test.txt
三,练习
给文档中的所有大写字母加 ' () '
sed -r 's/([A-Z])/(\1)/g' test.txt
四,练习
删除文档中的所有小写字母
sed -r 's/([a-z])//g' test.txt
五,练习
本案例要求编写脚本getupwd.sh,实现以下需求:
找到使用bash作登录Shell的本地用户
列出这些用户的shadow密码记录
按每行“用户名 --> 密码记录”保存到getupwd.log,如下图所示
以上是 shell四大天王之 sed 学习反思 的全部内容, 来源链接: utcz.com/a/46828.html