sed 的相关用法

写本篇博客时,正在读一本叫做《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.sed
1    #切换至当前行号
总用量 24
2
drwxrwxr-x  3 guest guest 4096  5月 24 16:54 ./
d
2    #删除当前行号的行
drwxr-xr-x 25 guest guest 4096  5月 24 09:41 ../
g/test/d                #表示全局删除带有test的所有的行,删除后,发现没有了包含test的行。
1    
总用量 24
2
drwxr-xr-x 25 guest guest 4096  5月 24 09:41 ../
3
-rw-r--r--  1 root  root    91  1月  9 17:20 function
4
drwxr-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为test1
1
总用量 24  
2
drwxrwxr-x  3 guest guest 4096  5月 24 16:54 ./
3
drwxr-xr-x 25 guest guest 4096  5月 24 09:41 ../
4
-rw-r--r--  1 root  root    84  1月  9 16:56 args_test1
5
-rw-rw-r--  1 guest guest   62  1月  8 21:30 file_test_1
6
-rw-r--r--  1 root  root    91  1月  9 17:20 function
7
drwxr-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为test1
1
总用量 24
2
drwxrwxr-x  3 guest guest 4096  5月 24 16:54 ./
3
drwxr-xr-x 25 guest guest 4096  5月 24 09:41 ../
4
-rw-r--r--  1 root  root    84  1月  9 16:56 args_test1
5
-rw-rw-r--  1 guest guest   62  1月  8 21:30 file_test1_1
6
-rw-r--r--  1 root  root    91  1月  9 17:20 function
7
drwxr-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.sed
9
?

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

g/test/s//test1/g
1
总用量 24
2
drwxrwxr-x  3 guest guest 4096  5月 24 16:54 ./
3
drwxr-xr-x 25 guest guest 4096  5月 24 09:41 ../
4
-rw-r--r--  1 root  root    84  1月  9 16:56 args_test1
5
-rw-rw-r--  1 guest guest   62  1月  8 21:30 file_test1_1
6
-rw-r--r--  1 root  root    91  1月  9 17:20 function
7
drwxr-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.sed
9
?

以下为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,china
master,17 beihaidao road,japan
bob,20 paris kk road,french
tom,34 dynamic road ,German
xinchen,19 zhongshan road,china
root@guest-virtual-machine:/home/guest/shell# sed 's/road/street/' edtest 
guest,13 king street,china
master,17 beihaidao street,japan
bob,20 paris kk street,french
tom,34 dynamic street ,German
xinchen,19 zhongshan street,china

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

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章