【Linux学习笔记28-2】shell文本处理工具之 sed

1. sed介绍


sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。


2. sed 命令简介


格式:
sed [选项] 命令 处理对象
sed [选项] '表达式1; 表达式2' 处理对象

sed选项
-n
仅显示处理结果
-i
将修改内容保存到文件中
-e
允许在同一行里执行多条命令
-f 脚本文件 file
使用脚本文件处理file

sed命令
p
显示行(打印模板块的行)
d
删除行
a
插入行(在当前行下面插入文本)
i
插入行(在当前行上面插入文本)
c
替换行
s
替换字符
w file
写入并追加模板块到file末尾
r file
整合文件(从file中读行)
q
退出
!
表示后面的命令对未选定的行进行作用
=
打印当前行号码

sed元字符集 /字符/
^
匹配行开始
$
匹配行结束
.
匹配一个非换行符的任意字符
*
匹配0个或多个字符
&
保存搜索字符用来替换其他字符
\<
匹配单词的开始
\>
匹配单词的结束
{m}
m次
{m,}
至少m次
{m,n}
m-n次
{,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这一行前插入行

在这里插入图片描述

扫描二维码关注公众号,回复: 12166358 查看本文章

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

  1. 将http端口号修改为此脚本后所跟的数字
  2. 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	#退出

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46069582/article/details/111407822