1.sed是一款流编辑工具,用来对文本进行过滤与替换工作,特别是当你想要对几十个配置文件做统计修改时,你会感受到sed的魅力! .sed流程: 输入 ------------------------------------------------ | | v v 读取一行内容,并复制到模式空间 <------------ sed 指令 | | v v ------------------------------------------------ 输出经过处理后的内容 |
二、sed基本语法结构 sed Options... [script] [inputfile...] 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 -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值。
$* ----所有参数的字符串