linux命令-sed命令使用(1)

sed基于 编辑器被称作流编辑器,跟普通交互式编辑器恰好相反。 在交互文本编辑器中(如vim),你可以 用键盘名利来交互式地插入,删除或者替换数据中的文本。流编辑器则会在编辑器处理数据之前基于预先提供的一组规则编辑数据流。
sed编辑器可以基于到命令行的,或是存储在命令文本中的命令来处理数据流中的数据。它每次从输入中读取一行,用提供的编辑器命令匹配数据, 按命令中指定的方式来修改流中的数据,然后将生成的数据到STDOUT.
在流编辑器将所有的命令与一行数据进行匹配后, 它会读 取下一行数据并重复这个过程。 在流编辑器处理流中所有的数据后,它就会终止。




下面看看  一些简单的实例:


sed 's/dog/cat/'   data5


[root@myCentOS shell]# cat  data5
The quick brown fox jumps over the lazy dog
The quick brown fox jumps over the lazy dog.  I am a beautiful dog.
The quick brown fox jumps over the lazy dog



[root@myCentOS shell]# sed 's/dog/cat/' data5,
The quick brown fox jumps over the lazy cat
The quick brown fox jumps over the lazy cat.  I am a beautiful dog.
The quick brown fox jumps over the lazy cat
这样写 的话,默认 只会替换 每行中第一次出现的 dog,   所以  第二行的第二个 dog  就没有被替换。



[root@myCentOS shell]# sed 's/dog/cat/2' data5
The quick brown fox jumps over the lazy dog
The quick brown fox jumps over the lazy dog.  I am a beautiful cat.
The quick brown fox jumps over the lazy dog
这里数字 2 ,就是说 只替换 每行中 第二次出现的匹配模式, 所以 第二行的 dog 就被 替换了,其他行的dog  依然在。


现在 我来修改 data5 
cat    data5 
The quick brown fox jumps over the lazy dog
The quick brown fox jumps over the lazy dog.  I am a beautiful dog. I am a beautiful single dog.
The quick brown fox jumps over the lazy dog
再来测试看一下。
[root@myCentOS shell]# sed 's/dog/cat/2' data5
The quick brown fox jumps over the lazy dog
The quick brown fox jumps over the lazy dog.  I am a beautiful cat. I am a beautiful single dog.
The quick brown fox jumps over the lazy dog


发现 第二行,第三次 出现的dog 并没有被替换掉,  所以 这个数字2 ,就是可以指定 每行中出现第二次的时候才替换, 其他情况 1,3,4次 不会替换。




[root@myCentOS shell]# sed 's/dog/cat/g' data5
The quick brown fox jumps over the lazy cat
The quick brown fox jumps over the lazy cat.  I am a beautiful cat. I am a beautiful single cat.
The quick brown fox jumps over the lazy cat

如果 想 全部替换 ,用g 就可以,相信大家都比较熟悉了。



sed  中还有一个 就是w ,可能用的不是很多。


[root@myCentOS shell]# sed 's/dog/cat/w test' data5
The quick brown fox jumps over the lazy cat
The quick brown fox jumps over the lazy cat.  I am a beautiful dog. I am a beautiful single dog.
The quick brown fox jumps over the lazy cat


此时在当前目录下,就会有一个 test 文件。
[root@myCentOS shell]# ls  -l test
-rw-r--r-- 1 root root 185 11月 25 15:28 test
[root@myCentOS shell]# cat  test
The quick brown fox jumps over the lazy cat
The quick brown fox jumps over the lazy cat.  I am a beautiful dog. I am a beautiful single dog.
The quick brown fox jumps over the lazy cat


当然 也可以加一些参数进来,比如 全部替换。
[root@myCentOS shell]# sed 's/dog/cat/g w /tmp/test' data5
The quick brown fox jumps over the lazy cat
The quick brown fox jumps over the lazy cat.  I am a beautiful cat. I am a beautiful single cat.
The quick brown fox jumps over the lazy cat


[root@myCentOS shell]# cat  /tmp/test 
The quick brown fox jumps over the lazy cat
The quick brown fox jumps over the lazy cat.  I am a beautiful cat. I am a beautiful single cat.
The quick brown fox jumps over the lazy cat






一般情况 sed  还有一个  -n  也比较好,禁止 输出的意思。一般 喜欢 和p  在一起 使用。
来举个简单例子。


[root@myCentOS shell]# sed   's/dog/cat/2 ' data5
The quick brown fox jumps over the lazy dog
The quick brown fox jumps over the lazy dog.  I am a beautiful cat. I am a beautiful single dog.
The quick brown fox jumps over the lazy dog


默认 sed  会把 每一行都打印 ,不管匹配有没有成功,都会打印出来。
[root@myCentOS shell]# sed   's/dog/cat/2 p ' data5
The quick brown fox jumps over the lazy dog
The quick brown fox jumps over the lazy dog.  I am a beautiful cat. I am a beautiful single dog.
The quick brown fox jumps over the lazy dog.  I am a beautiful cat. I am a beautiful single dog.
The quick brown fox jumps over the lazy dog

第二行打印了两次,第一次默认输出的, 第二次 是 匹配成功后,p 输出的。


但是想让输出一次,该怎么办呢?   这个时候就要用 -n  选项。


[root@myCentOS shell]# sed -n  's/dog/cat/2 p ' data5
The quick brown fox jumps over the lazy dog.  I am a beautiful cat. I am a beautiful single dog.


-n  禁止sed 输出,这样写 ,只有匹配行,才有资格输出到屏幕上来。


小结: sed  's/old/new/flags'    还可以 加一些选项 例如 -n 
关于 flags  大概 有4种:
1 数字 ,  仅匹配 某行中 第几次 出现的模式。
2 p  输出
3 g  全局替换
4  w  将替换后的文件,进行 输出到 文件中


sed -n     禁止 输出 选项
-n, --quiet, --silent        取消自动打印模式空间


sed  有时候 会遇到 替换的 字符串 有时候含有 特殊字符 比如:
/bin/bash   替换为   /bin/dash
这个时候 ,就不能 用/ 作为分割符, 我们可以用 #  !  这样的符号作为分隔符
下面举例说明:
[root@myCentOS shell]# cat  data6
#!/bin/bash
[root@myCentOS shell]# sed 's#/bin/bash#/bin/dash#'  data6
#!/bin/dash
[root@myCentOS shell]# sed 's!/bin/bash!/bin/dash!'  data6

#!/bin/dash


总结:  本文讲解了sed 最基本的使用, 希望通过本文可以帮助快速掌握sed 命令. 







  分享感动,留住快乐.                                                                                                                      20170829-23:14---biaoge




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值