简介
sed 是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
一 sed
sed: Stream EDitor, 行编辑器;
用法:
sed [option]… 'script' inputfile…
常用选项:
-n:不输出模式中的内容至屏幕;
-e: 多点编辑;
-f /PATH/TO/SCRIPT_FILE: 从指定文件中读取编辑脚本;
-r: 支持使用扩展正则表达式;
-i: 原处编辑;
地址定界:
(1) 不给地址:对全文进行处理;
(2) 单地址:
#: 指定的行;
/pattern/:被此处模式所能够匹配到的每一行;
(3) 地址范围:
#,#
#,+#
/pat1/,/pat2/
#,/pat1/
(4) ~:步进
1~2
2~2
编辑命令:
d: 删除
p: 显示模式空间中的内容
a \text:在行后面追加文本;支持使用\n实现多行追加;
i \text:在行前面插入文本;支持使用\n实现多行插入;
c \text:替换行为单行或多行文本;
w /path/to/somefile: 保存模式空间匹配到的行至指定文件中;
r /path/from/somefile:读取指定文件的文本流至模式空间中匹配到的行的行后;
=: 为模式空间中的行打印行号;
!: 取反条件;
s///:支持使用其它分隔符,s@@@,s###;
替换标记:
g: 行内全局替换;
p: 显示替换成功的行;
w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中;
示例1:再test.txt文件中cat替换了linux
sed 's/linux/cat/' test
示例2: 在命令行使用多个编辑器命令
sed -e 's/linux/cat/; s/is/hello/' test.txt
示例3:从文件中读取编辑器命令,有大量的要处理的sed命令,将他们放在一个文件中,可以在sed -f 选项来指定文件,本例放在了script
sed -f script test.txt
示例4:显示被命令修改过的行
sed -n 's/test/cat/p' test2.txt
示例5:数字方式的行寻址,修改2至3行
sed '2,3s/linux/cat/' test.txt
示例6: 删除2至3行
sed '2,3d' test.txt
示例7: 新行插入到数据流中第三行后面的例子
sed '3a\hello word' test.txt
示例8:修改第三行中的文本
sed '3c\hello word' test.txt
示例9:删除除/boot/grub/grub.conf文件中所有以空白开头的行行首的空白字符;
sed 's@^[[:space:]]\+@@' /boot/grub/grub.conf
示例10:删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符;
sed 's@^#[[:space:]]\+?@@' /etc/fstab
示例11:echo一个绝对路径给sed命令,取出其基名;取出其目录名
echo "/etc/sysconfig/" | sed 's@[^/]\+/\?$@@'
高级编辑命令:
h: 把模式空间中的内容覆盖至保持空间中;
H:把模式空间中的内容追加至保持空间中;
g: 从保持空间取出数据覆盖至模式空间;
G:从保持空间取出内容追加至模式空间;
x: 把模式空间中的内容与保持空间中的内容进行互换;
n: 读取匹配到的行的下一行至模式空间;
N:追加匹配到的行的下一行至模式空间;
d: 删除模式空间中的行;
D:删除多行模式空间中的所有行;
示例12:显示test3.txt文件中的偶数行
sed -n 'n;p' test3.txt
示例13:逆向显示test3.txt文件中的内容
sed '1!G;h;$!d' test3.txt
示例14:取出test3.txt 文件中的最后2行
sed '$!N;$!D' test3.txt
示例15:取出test3.txt 文件中的最后一行
sed '$!d' test3.txt
示例16:显示test3.txt 中的奇数行
sed 'n;d' test3.txt
原创文章,作者:liangkai,如若转载,请注明出处:http://www.178linux.com/12061