IT技术博客大学习 共学习 共进步

sed命令使用

Zhang Jiuan' Notes 2010-01-25 13:25:01 浏览 4,303 次

今天对sed小命令的几个选项总结一下,以备忘。
比如有这样一个源文件:
//school
tsinghua BJ
tongji SH
shanda SD
nanda JS
xidian XA
需求1:希望把BJ替换成Beijing, SH=>Shanghai, SD=>Shandong, JS=>Jiangshu, XA=>Xi’an
于是想到了sed命令可以完成替换功能。
sed ’s/BJ/Beijing/; s/SH/Shanghai/; s/SD/Shandong/; s/JS/Jiangshu/;s/XA/Xian/’ school
//output
tsinghua Beijing
tongji Shanghai
shanda Shandong
nanda Jiangshu
xidian Xian
效果还不错,记得sed还有一个-e选项,试一下这个吧:
sed -e ’s/BJ/Beijing/’ -e ’s/SH/Shanghai/’ -e ’s/SD/Shandong/’ -e ’s/JS/Jiangshu/’ -e’ s/XA/Xian/’ school
效果依旧:)
方法三:我们输入的时候分成多行
sed ‘
s/BJ/Beijing/
s/SH/Shanghai/
s/SD/Shandong/
s/JS/Jiangshu/
s/XA/Xian/
‘ school
效果同样不错。
方法四:存一个sed文件
//test.sed
s/BJ/Beijing/
s/SH/Shanghai/
s/SD/Shandong/
s/JS/Jiangshu/
s/XA/Xian/
sed -f test.sed school
效果还是挺令人满意的。
需求二:我们只把BJ替换成Beijing其它的不替换,也不显示。
这时候-n便派上用场了。
sed -n ’s/BJ/Beijing/p’ school
输出如下:
tsinghua Beijing
怎么样,不错吧。

现在想想,XA似乎没有替换成Xi’an,没有单引号,怎么办?

对了,sed输入实际可以使用双引号的,试一下吧

sed -e ’s/BJ/Beijing/’ -e ’s/SH/Shanghai/’ -e ’s/SD/Shandong/’ -e ’s/JS/Jiangshu/’ -e “s/XA/Xi\’an/” school

结果正确了~~~~~~

总结一下:

1 sed的-f为指定执行文件

2 sed的-n选项,过滤不匹配的输出

3 sed的-e指定后面跟的是命令

4 sed的输入可以是”",这样可以过滤一些特殊字符

建议继续学习

  1. vim几个小技巧(批量替换,列编辑) (阅读 37,263)
  2. ps - 按进程消耗内存多少排序 (阅读 12,523)
  3. find命令的一点注意事项 (阅读 11,682)
  4. 100个常用的linux命令 (阅读 11,442)
  5. 利用find和sed批量替换文件内容 (阅读 11,346)
  6. 每个程序员都应该知道的8个Linux命令 (阅读 10,585)
  7. 最受欢迎的10个 Linux 单行命令 (阅读 10,002)
  8. Linux date 命令获取某日期的前一天 (阅读 9,723)
  9. ps 命令常见用法 (阅读 9,322)
  10. Linux常用系统信息查看命令 (阅读 8,501)