sed命令

1.sed是一款流编辑工具,用来对文本进行过滤与替换工作,特别是当你想要对几十个配置文件做统计修改时,你会感受到sed的魅力!
  sed通过输入读取文件内容,但一次仅读取一行内容进行某些指令处理后输出,所以sed更适合于处理大数据文件。

.sed流程:
        * 通过文件或管道读取文件内容。
        * sed并不直接修改源文件,而是将读入的内容复制到缓冲区中,我们称之为模式空间(pattern space)。
        * 根据sed的指令对模式空间中的内容进行处理并输出结果,默认输出至标准输出即屏幕上。

              输入

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

                      |

                      |

                      v

                      v

            读取一行内容,并复制到模式空间    <------------ sed 指令

                      |

                      |

                      v

                      v

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

                输出经过处理后的内容

二、sed基本语法结构

sed  Options...  [script]   [inputfile...]
sed  选项...       [脚本指令]      [输入文件]
如果没有输入文件,则sed默认对标准输入进行处理(即键盘输入)。脚本指令是第一个不以“-”开始的参数。

1.选项含义:

    --version            显示sed版本。

    --help               显示帮助文档。

    -n,--quiet,--silent    静默输出,默认情况下,sed程序在所有的脚本指令执行完毕后,将自动打印模式空间中的内容,这些选项可以屏蔽自动打印。

    -e script              允许多个脚本指令被执行。

    -f script-file,

    --file=script-file        从文件中读取脚本指令,对编写自动脚本程序来说很棒!

    -i,--in-place        直接修改源文件,经过脚本指令处理后的内容将被输出至源文件(源文件被修改)慎用!

     -l N, --line-length=N    该选项指定l指令可以输出的行长度,l指令用于输出非打印字符。

     --posix            禁用GNU sed扩展功能。

     -r, --regexp-extended   在脚本指令中使用扩展正则表达式

     -s, --separate        默认情况下,sed将把命令行指定的多个文件名作为一个长的连续的输入流。GNU sed则允许把他们当作单独的文件, 这样如正则表达式则不进行跨文件匹配。

     -u, --unbuffered      最低限度的缓存输入与输出。

 

sed应用举例

 

$ sed -n 'p' test.txt

aaaa=111

bbbb=222

 

cccc=3333

 

 

dddd=44444

$

包括空行

 

$ sed -n '3,/ddd/p' testfile.txt  从第三行开始匹配,打印到含有ddd的行

 

$ sed -n '/^$/=' testfile.txt  打印空行

3

5

6

$ sed -n -e '/^$/p' -e '/^$/=' testfile.txt 即打印空行又打印行号

 

3

 

5

 

6

 

以上仅是sed程序本身的选项功能说明

 这里就简单介绍几个脚本指令操作作为sed程序的例子。

    a,append        追加

    i,insert        插入

    d,delete        删除

    s,substitution  替换

查找替换应用举例

sed  '2a TYPE=Ethernet'  test.txt    第二行后添加TYPE=Ethernet

sed  '3i  TYPE=Ethernet'  test.txt   第三行前添加TYPE=Ethernet

sed  's/yes/no/g'     test.txt       将样本文件中的所有yes替换为no

sed  '3,4d'  test.txt                删除第3至4行的内容

总结:以上大多数操作指令,都依据行号定位操作对象(地址),如:2a即第二行后添加。
但实际情况可能大多数情况你并不确定你要操作对象(地址)的行号,这时更多的我们会使用正则表达式确定操作对象(地址)。

下面是使用正则表达式定位操作行的示例:

sed  '/222/a iiii=1111 '  testfile.txt

匹配到包含222的行,并在其后添加iiii=1111

sed  '/^aaa/d'  testfile.txt

匹配以aaaa开始的行,并删除改行

 

需要执行多个指令时,可以使用以下三种方法:
#sed  's/yes/no/;s/static/dhcp/'  test.txt            注:使用分号隔开指令。

 #sed  -e  's/yes/no/'    -e  's/static/dhcp/'  test.txt    注:使用-e选项。

#sed '
    >s/yes/no/
    >s/static/dhcp/'  test.txt
                                    注:利用分行指令。
 然而在命令行上输入过长的指令是愚蠢的,这时就需要-f选项指定sed脚本文件,在脚本文件中可以包含多行指令,而且便于修改!

sed  -i  's/^M//g'  a.txt > new.out

cat gpdata_wbm10.bak | sed 's/^M//g' | awk '$0' > 2.log

sed命令DOS2UnixFile

 

使用技巧

         vim中,打开vim编译器执行set nu命令。

 

 

经验话语:

shell脚本参数意义

在shell中,表示值是用$,相当于DOS中的%。

1.位置参数

一般是系统或用户提供的参数。

$[0-n],$0,表示指令本身,$1表示第一个参数,一次类推。

$0是内部参数,必须要有的,其后的就可有可无了

2.内部参数

$# ----参数数目

$? ----上一个代码或者shell程序在shell中退出的情况,如果正常退出则返回0,反之为非0值。

$* ----所有参数的字符串

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值