sed命令
流编辑器 作为行编辑器对文本进行编辑(以行为单位进行编辑)
注意:sed编辑文件却不改变源文件;
工作原理:指定一个文本文件依次读取文本文件中每行的内容,读取到pattern space模式空间中,在模式空间中进行文本匹配(正则表达式)对匹配后的内容进行修改(s替换、d删除、p打印、修改、保存)。
常见选项
-n (取消自动打印模式空间)
-r 指定使用扩展表达式 所以不需要 |表示或者
-e 脚本 for while if
-l 指定“l”命令的换行期望长度
-f 指定脚本文件
-i 直接修改文件内容(不要使用)
地址定界方式
- 直接匹配数值 --sed -n’5,7p’ filename
- d~步长 --sed -n ‘1-3p’ filename
- $指定行尾 --sed -n’10,$p’filename
- /正则/
/正则1/ /正则2/
sed -n’/k{5,}/,$p’abc
sed -n’/(fd)+/.7p’abc 正则写在前面就没有问题写在后面就有问题
sed -n’
5.0,addr
addr可以为数字/$/正则表达式
sed-n’0,/k{5,}/p’abc
6.addr,+N
配置addr行到,addr后N行
sed -n ‘/fd/.+5p’abc
7.vim.代表光标所在当前行:esc+“.,$/^/#/”---注释 esc+”:.,+3s/^#//”---取消注释 /pattren1/,/pattern2/从模式1匹配到的行到模式2匹配到的行 步长用~,例如1~3
8.*常见命令
i 在匹配行的上一行添加指定的内容
sed “/for/iabc”99cfb.sh
a 在匹配行的下一行添加指定的内容
sed “/for/aabc”99cfb.sh
p print 打印(默认在屏幕上显示出来)建议和-n一起使用
c 替换 sed”/aaa/cA”a
d 删除 sed”/aaa/d”a sed “1,3d”a sed”/for/d”99cfb.sh
n/N 读取/添加模式匹配到的行的下一行内容进行操作
w 保存文件内容到一个新的文件
sed “/pattern/w 新的文件名”原来的文件名
eg:sed”/k/w /root/aabbcc”abc
s 文本内容替换,默认替换模式空间匹配到的第一项
s/pattern/字符串/ 中间的/可以替换为任意一个特殊字符
g 行内全局替换
1 2 和正则表达式相同实现反向应用;
& 调用前面匹配的内容
..表示任意一个字符
sed 高级应用:模式空间--hold space 占有空间
练习:
删除/boot/grub/grub.conf文件中所有空白开头的行行首的空白字符;
sed 's/^[[:space:]]+//g' /boot/grub/grub.conf
删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行 的行首的#和空白字符;
sed 's/^#[[:space:]]+//g' /etc/fstab
给定一个目录,取出其目录名
echo "/etc/passwd" | sed 's/[^/]+$//'
给定一个目录,取出其文件名
echo "/etc/passwd" | sed 's#^/.*/(.*)##
/var/log/message
sed '/[^/]+/'
dirname -- 取出文件路径的路径部分
basename -- 取出文件路径的文件名部分