写本篇博客时,正在读一本叫做《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 为文件名