1. sed介绍
sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
2. sed 命令简介
格式:
sed [选项] 命令 处理对象
sed [选项] '表达式1; 表达式2' 处理对象
|
|
---|---|
|
仅显示处理结果 |
|
将修改内容保存到文件中 |
|
允许在同一行里执行多条命令 |
|
使用脚本文件处理file |
|
|
---|---|
|
显示行(打印模板块的行) |
|
删除行 |
|
插入行(在当前行下面插入文本) |
|
插入行(在当前行上面插入文本) |
|
替换行 |
|
替换字符 |
|
写入并追加模板块到file末尾 |
|
整合文件(从file中读行) |
|
退出 |
|
表示后面的命令对未选定的行进行作用 |
|
打印当前行号码 |
|
|
---|---|
|
匹配行开始 |
|
匹配行结束 |
|
匹配一个非换行符的任意字符 |
|
匹配0个或多个字符 |
|
保存搜索字符用来替换其他字符 |
|
匹配单词的开始 |
|
匹配单词的结束 |
|
m次 |
|
至少m次 |
|
m-n次 |
|
0-n次 |
|
该文本出现几次 |
3. sed用法示例
p 显示行
-n 5p #显示第五行
-n 3,5p #显示3-5行
-ne '3p;5p' #显示3和5行
-ne '5,$p' #5-最后一行
-n '/^ro/p' #显示以ro开头的行
d 删除
sed 5d passwd #删除第5行
sed '/^ro/d' passwd #把ro开头的行删除
sed '/^ro/!d' passwd #除了ro开头的行都删除
sed '3,$d' passwd #删除第3行之后
sed '/^$/d' passwd #删除空白行
a 插入(在当前行下面插入文本)
sed "5a hello westos" passwd #第5行后添加行
sed "/root/a hello westos" passwd #有root的行后添加行
sed '$a hello westos' passwd #最后一行后添加行
sed '1,5a hello westos' passwd #1-5行,每行后添加行
sed -e '1a hello westos' -e '5a hello' passwd #第一行和第5行后添加行
i 插入(在当前行上面插入文本)
sed '3i zy' passwd #在第3行前插入行
sed '1,3i zy' passwd #在1-3行,每行前插入行
sed '/lp/i zy' passwd #在有lp这一行前插入行
c 替换
sed '3c hello zy' passwd #第3行替换
sed '/^root/c hello zy' passwd #root开头的行替换
sed '/sbin/c hello zy' passwd #有sbin的行替换
w 写入文件
sed '3w w_file' passwd #把文件passwd的第三行写入到w_file中
sed '3,5w w_file' passwd #把文件passwd的3-5行写入到w_file中
sed '/var/w w_file' passwd #把文件passwd有var的行写入到w_file中
r 整合文件
(行号之后)
sed '3r r_file' passwd #把文件r_file整合在passwd第3行之后
sed '$r r_file' passwd #把文件r_file整合在passwd最后
s 替换字符
sed 's/sbin/---/g' passwd #把全文的sbin替换为---
sed '3s/sbin/---/g' passwd #把第3行的sbin替换为---
sed '2,4s/sbin/---/g' passwd #把第2-4行的sbin替换为---
sed '2,4s/sbin/---/g;6s/sbin/+++/g' passwd #把第2-4行的sbin替换为---,第6行的sbin替换为+++
sed -e '/bin/,/adm/s/sbin/---/g' passwd #bin到adm之间的行的sbin替换为---
sed -e 's/\//--/g' passwd #把/替换为-(需要转义符号)
sed -e 's@/@777@g' passwd #把/替换为-(用@无需转义)
= 显示行号
sed '=' passwd #显示行号(行号和内容不在同一列)
sed '$=' passwd #只显示最后一行的行号
sed '=' passwd | sed -e 'N;s/\n/ /g' #将行号和内容显示在同一列
sed -n '$=' passwd #统计行号
wc -l passwd #统计行号
4. 测试
编辑脚本 apache_port.sh
- 将http端口号修改为此脚本后所跟的数字
- selinux为关闭状态
#!/bin/bash
#检测脚本后的端口号是否为空
[ -z $1 ] && {
echo "ERROR: Please input port following script !"
exit
}
#找到http主配置文件中的端口号那一行 并修改
sed "/^Listen/c Listen $1" -i /etc/httpd/conf/httpd.conf
#重启httpd服务
systemctl restart httpd
exit #退出