SED-强大的流编辑器-[学习01]

来源:互联网 发布:华中农业大学学报软件 编辑:程序博客网 时间:2024/06/05 03:41

sed - stream editor for filtering and transforming text

作为一个UNIX/Linux平台下强大的流编辑器, 是非常值得我们这些Linux fans去学习和深入理解的。

 

G :::: 跳至[缺省是到文件末尾] 

Ctrl + g = ^g :::: 显示状态栏 

 

本文所有的内容均来自互联网, 而且是来在国外的论坛或者网站

Href = http://www.grymoire.com/Unix/Sed.html, 本人仅做必要的解释和相关的修正.

 

一. 基础部分

 

    1. s for substitution

        比如想要将文件sar中的asp换成php, 并重定向输出到dst文件(每行只替换一次,如果一行中

        有多个asp, 那么看到的结果将是第一个asp被替换成php, 其余均不变 ).

 

        %: sed s/asp/php/ sar > dst

 

        因为sed是一个流编辑器,输入可以是一个文件,当然也可以是如下的输入

 

        %: echo "asp and java" | sed s/asp/php/

 

        当然比较安全的做法是用单引号将替换部分引起来:

 

        %: sed 's/asp/php/' sar > dst

 

        总结: s/,,,,,,,/,,,,,,/

 

 

    2. 路径的替换(Eg....)

        因为路径中经常包含有 '/' 或 '/' 字符, 所以需要转义 '/'

        比如将sar文件中的 /usr/bin/ 替换为 /home/acc1 有如下几种方法:

 

        %: sed 's///usr//bin/////home//acc/ sar > dst

 

        %: sed 's: /usr/bin/ :/home/acc/ :' sar > dst

 

        %: sed 's| /usr/bin/ |/home/acc/ |' sar > dst

 

        可见适当的采用 :..... : >>>>>>> :  和 |..... | >>>>> | 可以很方便

 

    3. '&'  字符的使用

        在sed中 '&' 表示找到(匹配)的字符或串

 

        %: echo "123456abc" | sed 's/123456/&--->/'  将得到如下:

 

        123456--->abc   因为里面找到的123456都被替换成 123456---> 了

 

        再来看几个很有意思的小程序, 注意观察他们的输入有何不同, why?

 

         $ echo "123 abc" | sed 's/[0-9]/&-->/'

        1-->23 abc

                    --------only 1 time

 

         $ echo "123 abc" | sed 's/[0-9]/&-->/g'

        1-->2-->3--> abc

                    --------for 3  times

 

         $ echo "123 abc" | sed 's/[0-9]*/&-->/'

        123--> abc

                    --------because of `*` , for 1 time

 

         $ echo "123 abc" | sed 's/[0-9]*/&-->/g'

        123--> -->a-->b-->c-->

                    --------???? * 表示匹配0或者多个 /a*/ 0或多个a

                            【0-9】那应该是表示0或者多个数字, 123匹配一次

                            后面的abc表示0个数字,也成功一次~!

 

        $ echo "123 abc" | sed 's/[0-9].*/&-->/g'

        123 abc-->

                    --------for 1 time & == "123 abc"

 

         $ echo "123 abc" | sed 's/[0-9]/&-->/g'

        1-->2-->3--> abc

                    --------for 3 times 

 

今天暂时到这里--有时间继续~!

--------------------------------------------------------------------

 

 

 

 

 

原创粉丝点击