sed命令

来源:互联网 发布:淘宝客好做吗 编辑:程序博客网 时间:2024/06/05 19:00

sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

使用实例

1、以行为单位的新增/删除

// 删除空白行sed '/^$/d' test.txt// 删除以my开头的行sed '/^my/'d test.txt// 删除第2,3行 d表示删除cat test.txt | sed '2,3d'// 只删除第二行cat -n test.txt | sed '2d'// 删除第3到最后一行cat -n test.txt | sed '3,$d'// 在第二行后第三行前 添加000cat -n test.log | sed '2a 000'// 在第二行前添加cat -n test.log | sed '2i 000'

2、以行为单位的替换

// 替换2,3行为abccat -n test.log | sed '2,3c abc'// 只显示3-5行cat -n test.log | sed -n '3,5p'

3、 数据的搜寻展示

// 显示包含关键字a的行 -n选项和p命令一起使用表示只打印那些发生替换的行:cat  -n test.log | sed -n '/a/p'// 删除包含a的行cat  -n test.log | sed '/a/d'// 找到a对应的行,并执行后面的命令 把b替换为dddcat -n test.log | sed -n '/a/{s/b/ddd/;p}'// 替换第一个关键字a 为ddd,并退出cat -n test.log | sed -n '/a/{s/a/ddd/;p;q}'// 删除3到最后一行,并把222替换为qqqcat -n test.log | sed -e '3,$d' -e 's/222/qqq/'// 显示奇数行sed -n 'p;n' test.txt// 显示偶数行sed -n 'n;p' test.txt

4、直接修改文件内容

// 利用 sed 将 test.log 内每一行结尾若为 . 则换成 !sed -i 's/\.$/\!/g' test.log// 利用 sed 将 test.log 内每一行结尾若为1 则换成2sed -i 's/1$/2/g' test.log// 在最后一行加入 this is a testsed -i '$a this is a test' test.log

5、指定位置匹配

echo sksksksksksk | sed 's/sk/SK/2g'  //skSKSKSKSKSK// 也可以使用其他定界符 效果一样echo sksksksksksk | sed 's:sk:SK:4g'echo sksksksksksk | sed 's|sk|SK|4g'// 定界符出现在样式内部时,需要转义echo '/usr/local/bin' | sed 's/\/usr\/local\/bin/\/USR\/LOCAL\/BIN/g'

6、正则匹配

// 正则表达式\w\+匹配每一个单词,使用[&]替换它,&对应之前所匹配到的单词// [this] [is] [a] [test] [line]echo this is a test line | sed 's/\w\+/[&]/g'// 匹配给定样式的其中一部份 子串匹配标记\1// this is 7 in a numberecho this is digit 7 in a number | sed 's/digit \([0-9]\)/\1/'// BBB aaaecho aaa BBB | sed 's/\([a-z]\+\) \([A-Z]\+\)/\2 \1/'// 打印从第5行开始到第一个包含以this开始的行之间的所有行:sed -n '5,/^this/p' test.txt