非交互式编辑器,一次处理一行内容。(流文本编辑器)
参数
① -f 指定一个规则文件 需求复杂的时候,需要匹配的内容多
② -n 阻止输入行输出
③ -r 扩展正则,将匹配不到的现在可以匹配到了
④ -i 修改后的数据会替换原文件
模式
①s 替换
② g 整行(也可以是数字,替换第几个)
③ d 删除
④ p 打印
⑤ a 追加
⑥ i 插入
1、替换
cp /etc/passwd /opt
用ROOT替换root: #前面两个斜杠中是要匹配的内容,可以使用正则,后面两个斜杠中间,是要替换的内容,是纯文本
sed 's/root/ROOT/' /opt/passwd
sed 's/root/ROOT/ ; s/mail/MAIL/' /opt/passwd
使用脚本文件:
vim state
脚本:
s/root/Root/
s/lp/LP/
s/mail/Mail/
使用脚本文件:
sed -f state /opt/passwd
保存输出:
sed -f state /opt/passwd > newfile
阻止输入行自动显示:
sed -n 's/root/ROOT/p' /opt/passwd
2、删除
rm -rf /opt/*
cp /etc/passwd /opt
删除文件第一行
sed '1d' /opt/passwd
删除文件的第1到2行
sed '1,2d' /opt/passwd
删除第2行到最后一行
sed '2,$d' /opt/passwd
匹配到root,删除此行
sed '/root/d' /opt/passwd
匹配root行,到某一行
sed '/root/,2d' /opt/passwd
删除奇数行
sed '1~2d' /opt/passwd
删除偶数行
sed '0~2d' /opt/passwd
sed可以利用指令来删除文件中的空行
sed '/^$/d' /opt/passwd
删除sshd配置文件的注释和空行
sed '/^#.*/d;/^$/d' /opt/passwd
3、替换
rm -rf /opt/*
cp /etc/passwd /opt
选项 -i 会使得sed用修改后的数据替换原文件
sed -i 's/bin/BIN/' /opt/passwd
g标记可以使sed执行全局替换
sed 's/root/admin/g' /opt/passwd
忽略大小写替换
sed 's/Root/admin/gi' /opt/passwd
g标记可以使sed匹配第N次以后的字符被替换
echo "thisthisthisthis" | sed 's/this/THIS/2g'
sed中的分隔符可以替换成别的字符, 因为s标识会认为后面的字符为分隔符
sed 's:adm:text:' /opt/passwd
sed 's|adm|text|' /opt/passwd
由于在使用 -i 参数时比较危险, 所以我们在使用i参数时在后面加上.bak就会产生一个备份的文件
sed -i.bak 's/root/admin/' /opt/passwd
sed如果在脚本中使用的话, 不可避免的要调用变量, 所以以下这种方式可以用来调用变量,即' '换成了" "
text=hello
echo "hello world" | sed "s/$text/HELLO/"
将等号左右两边的内容调换
sed "s/\(.*\) = \(.*\)/\2 = \1/" /opt/passwd
4、追加和插入
rm -rf /opt/*
cp /etc/passwd /opt
在匹配到开头为bin的行下一行插入内容
sed '/^bin/a\hello nihao/' /opt/passwd
在匹配到开头为bin的行上一行插入内容
sed '/^bin/i\hello nihao/' /opt/passwd