您的位置:首页 > 运维架构 > Linux

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

2017-08-29 23:12 288 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: