sed命令
linux文本处理三剑客
sed stream editor
做为行编辑器,对文本进行编辑(以行为单位进行编辑)
注意:sed编辑文件,却不改变原文件
sed工作原理
制定一个文本文件,依次读取文本文件中每行的内容,读取到模式空间中(PATTERN SPACE),在模式空间中进行文本匹配(正则表达式),对匹配后的内容进行修改(替换、删除、打印、修改、保存)
用法:
sed[option]…{script-only-if-no-other- script}[input-file]…
sed[参数] “sed自己独立的用法格式的语句”[文本文件]
常见选项
-n 拒绝默认显示[默认情况下全部输出]
-r 指定使用扩展的正则表达式
-e script for or while if
-f 指定脚本文件
-l 指定 文本长度
-i 直接修改文件内容
地址定界方式
1.直接匹配数值 sed -n ‘5p’文件
2.$指定行尾 sed -n ’10,$p’ 文件
3.digit~步长 eg. sed -n ‘1~3’文件
4./正则1/,/正则2/
sed -n ‘/k\{5,\}/$p’ abc
sed -n ‘/\(fd\)\+/,7p’ abc
5.0,addr
addr可以为数字/$/正则表达式
sed -n ‘0,/k\{5,\}/p’abc
6.addr,+N
配置addr行到,addr后N行
sed -n ‘/fd/,+5p’ adc
常见命令
p print 打印(默认在屏幕上显示出来)建议和-n一起使用
c 替换
sed “/aaa/c \A” a
d 删除
sed “/aaa/d” a
sed “1,3d” a
n N(读取/添加)模式匹配到的下一行内容,再对其进行操作
w 保存文件内容到一个新的文件
sed “/patthen/w新的文件名”原来的文件名
sed “/k/w /tmp/aabbcc” abc
*s* 文本内容替换,默认替换模式空间匹配到的第一项;
语法格式:s/pattern/字符串/
中间的斜杠可以替换为任意一个特殊字符
g global全部
\1\2 和正则表达式的分组相同,实现反向应用
指定某一个匹配选项进行修改替换
& 调用前面匹配的内容
sed “s/r..t/&er/g” 文件
w
p
sed的高级应用
模式空间 – hold space“占有空间”
练习:
1. 删除/boot/grub/grub.conf文件中所有空白开头的行行首的空白字符;
sed ‘s/^[[:space:]]\+//g’ /boot/grub/grub.conf
2. 删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符
sed ‘s/^#[[:space:]]\+//g’ /etc/fstab
3. 给定一个目录,取出其目录名
4. 给定一个目录,取出其文件名
dirname – 取出文件路径的路径部分
basename – 取出文件路径的文件名部分