流编辑器sed
sed简介
sed是一种流编辑器,处理时,把当前处理的行存储在临时缓冲区中,称为模式空间,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下行,这样不断重复,直到文件末尾。文件内容并没有改变。
sed的语法
基本语法:# sed 参数 测试文件
常用参数详解
# cat passwd -n > testfile 【配置测试文件】
-n : --quiet,--silent: 不输出模式空间中的内容,使用安静模式,在一般sed的用法中,所有来自STDIN的数据一般都会被列出到屏幕上,但如果加上-n参数后,则只有经过sed特殊处理的那行才会被列出来;
-i : 直接编辑原文件,而不是由屏幕输出,默认不对原文件进行操作;
-e : 直接在命令行模式上进行sed的动作编辑,多个子命令之间也可以用分号隔开;
-r : 使用扩展正则表达式;
-f : 直接将sed的动作写在一个文件内,-f rule则可以执行rule内的sed动作。
# vim rule
模式空间中的编辑操作
地址定界
# sed -n (行/参数)s / 匹配内容 / 替换内容 /g 测试文件
# cat passwd 【查看测试文件】
# sed '1,3s/:/bin/g' passwd 【1-3行,将 : 为目标替换为bin】
# sed -e '2,+2s/bin/:/g' passwd 【替换2行以及后2行】
# sed -e '2~2s/:/_@_/g' passwd 【第2行开始,间隔1行替换】
# sed -e '/daemon/,/sys/s/:/@/g' passwd 【对daemon开头到sys开头的行替换字符】
# sed '1,/^sys/s/:/##/g' passwd 【从第1行到sys的行】
常用编辑命令
显示删除行/d
显示指定行/p
添加行a
插入行i
整行替换
整合文件
字符替换
练习:根据用户参数和用户密码参数,设置创建用户脚本
# vim cj.sh 【创建脚本】
#!/bin/bash
li=`wc -l user.sh | cut -d " " -f 1` 【wc -l 统计行数,cut -d " " -f 1 以空格为分隔符取第一列】
# 创建用户
for i in `seq 1 $li`
do
#读取脚本
username=`sed -n "${i}p" $1` 【读取第一个参数,用户名脚本】
password=`sed -n "${i}p" $2` 【读取第二个参数,密码脚本】
# 检查用户是否已存在
if id "$username" &>/dev/null;
then
echo "用户 '$username' 已存在"
#不存在创建
else
useradd "$username"
echo $passwd | passwd --stdin $username &> /dev/null
fi
done
用户已创建运行结果:
运行结果:
特殊字符
# sed '2,+1s/:/##/g' testfile 【替换第2行以及后1行】