Sed命令学习
1.Sed简介
流数据编辑器 Stream editer(sed),它是一种行编辑器(对应于全屏编辑器),一次处理一行的内容。默认不编辑原文件内容(-i会直接修改原文件)。处理时,它先将当前符合模式的行存储在临时缓冲区内,处理完之后,把缓冲区的内容送往屏幕打印出来.
2.命令格式
sed [option] 'AddressCommand' file....
Address
起始行,结束行; 1,50 sed '1,10d' /etc/fstab
起始行,+N行; sed '1,+3d' /etc/fstab
/正则表达式/ ; /^root/ sed '/UUID/d' /etc/fstab
/模式1/,/模式2/;第一次被模式1匹配到的行到第二次被模式2匹配到的所有行
行号;指定要处理的行,$表示最后一行 sed '$d' /etc/fstab
Command
d;删除符合条件的行
p;显示符合条件的行 sed '^UUID/p' /etc/fstab
a \String; 在符合条件的行后追加String新行 sed '^UUID/a \#comment' /etc/fstab
i \String;在符合条件的行前添加String新行
r FILENAME;将指定的文件的内容添加至符合条件的行后(合并文件) sed '$r /etc/passwd' /etc/fstab
w FILENAME;将符合条件范围内的内容另存到指定的文件中 sed '/^UUID/w /tmp/333.txt' /etc/fstab
s /模式/String/;查找每行中第一次符合条件的内容并替换成String,分割符可以用#,@等,%s表示全文搜索
sed 's/^UUID/uuid/' /etc/fstab sed 's/-/#/' /etc/fstab
修饰符 g全局替换,i忽略大小写 sed 's/-/#/g' /etc/fstab
option
常见的一些选项
-n 静默模式
-i 直接修改源文件
-e addresscommand -e addresscommand 同时执行多个命令
-f /scriptfile 用脚本文件对文件进行处理
-r 使用扩展正则表达式
3. 例子
1.删除history行首的所有空格 history | sed 's/^[[:space:]]*//g'
2.通过脚本添加参数中的用户,参数中的用户用逗号分隔
addusersh user1,user2,user3
#!/bin/bash
for l in `echo $1 | sed 's/,/ /g'`;do
if id $l &> /dev/null;then
echo "$l exists"
else
useradd $l
echo $l | passwd --stdin $l &> /dev/null
echo "$l added"
fi
done