写本篇博客时,正在读一本叫做《sed & awk》的第三版书籍,这本书真的很不错,作为一本热门技术书籍,足以见得作者是一个很用心的人,(当然我看的是中文翻译版的,翻译作者同样用心),感谢作者提供这样优秀的书籍供热爱技术的人们学习,感谢。

说起sed,不得不说一说ed,首先来说ed类的编辑器都是基于行进行操作的,sed也是这样。

ed中的命令说明:

ed中的操作分两部分,一是地址操作,二是对行的修改操作。

以下为ed的删除命令  

root@guest-virtual-machine:/home/guest/shell# ed test.sed 399                                #显示的是文件中的字符的个数p    #显示当前行-rw-r--r--  1 root  root     0  5月 24 17:01 test.sed1    #切换至当前行号总用量 242drwxrwxr-x  3 guest guest 4096  5月 24 16:54 ./d2    #删除当前行号的行drwxr-xr-x 25 guest guest 4096  5月 24 09:41 ../
g/test/d                #表示全局删除带有test的所有的行,删除后,发现没有了包含test的行。1    总用量 242drwxr-xr-x 25 guest guest 4096  5月 24 09:41 ../3-rw-r--r--  1 root  root    91  1月  9 17:20 function4drwxr-xr-x  2 root  root  4096  1月  9 17:26 function_import/5            #如果命令出错,显示??

以下为替换命令:(替换命令,我只提出下边两种情况)

/test/s/test/test1/g   # 地址为/test/  修改是/s/test/test1/g ,表示修改test所在第一行的所有test为test11总用量 24  2drwxrwxr-x  3 guest guest 4096  5月 24 16:54 ./3drwxr-xr-x 25 guest guest 4096  5月 24 09:41 ../4-rw-r--r--  1 root  root    84  1月  9 16:56 args_test15-rw-rw-r--  1 guest guest   62  1月  8 21:30 file_test_16-rw-r--r--  1 root  root    91  1月  9 17:20 function7drwxr-xr-x  2 root  root  4096  1月  9 17:26 function_import/8-rw-r--r--  1 root  root     0  5月 24 17:01 test.sed
g/test/s/test/test1/g #表示匹配所有带有test的行,并修改所有的test为test11总用量 242drwxrwxr-x  3 guest guest 4096  5月 24 16:54 ./3drwxr-xr-x 25 guest guest 4096  5月 24 09:41 ../4-rw-r--r--  1 root  root    84  1月  9 16:56 args_test15-rw-rw-r--  1 guest guest   62  1月  8 21:30 file_test1_16-rw-r--r--  1 root  root    91  1月  9 17:20 function7drwxr-xr-x  2 root  root  4096  1月  9 17:26 function_import/8-rw-r--r--  1 root  root     0  5月 24 17:01 test1.sed9?

总结说明:开始处的“g”为全局命令,表示匹配所有的这个(字符,或是正则)地址,结尾处的“g”表示匹配每一行中出现的这个字符,或者正则。(如果地址和匹配字符一样,可以进行省略。

g/test/s//test1/g1总用量 242drwxrwxr-x  3 guest guest 4096  5月 24 16:54 ./3drwxr-xr-x 25 guest guest 4096  5月 24 09:41 ../4-rw-r--r--  1 root  root    84  1月  9 16:56 args_test15-rw-rw-r--  1 guest guest   62  1月  8 21:30 file_test1_16-rw-r--r--  1 root  root    91  1月  9 17:20 function7drwxr-xr-x  2 root  root  4096  1月  9 17:26 function_import/8-rw-r--r--  1 root  root     0  5月 24 17:01 test1.sed9?

以下为grep命令在实际中的应用:(查找结果会高亮显示

root@guest-virtual-machine:/home/guest/shell# grep 'test' test.sed -rw-r--r--  1 root  root    84  1月  9 16:56 args_test-rw-rw-r--  1 guest guest   62  1月  8 21:30 file_test_1-rw-r--r--  1 root  root     0  5月 24 17:01 test.sed

sed 的使用方法,替换命令。(一般使用‘’将命令进行处理,也可用“”)

root@guest-virtual-machine:/home/guest/shell# cat edtest guest,13 king road,chinamaster,17 beihaidao road,japanbob,20 paris kk road,frenchtom,34 dynamic road ,Germanxinchen,19 zhongshan road,chinaroot@guest-virtual-machine:/home/guest/shell# sed 's/road/street/' edtest guest,13 king street,chinamaster,17 beihaidao street,japanbob,20 paris kk street,frenchtom,34 dynamic street ,Germanxinchen,19 zhongshan street,china

可以直接采用文件的形式惊醒匹配,将sed的参数(规则,正则表达式等)写在一个文件中,然后通过以下命令进行调用:

sed -f sedscript filename # sedscript 为脚本名,filename 为文件名