前言:
sed是一种流编编器,它是文本处理中非常中的工具,能够完美的配合正则表达式便用,功物能不同凡响。
处理时,把当前处理的行存储在临时缓冲区中,称为”模式空间”( oattern space),接看用sed命令处理缓冲区中的内容,处理成后,把缓冲区的内容送往屏幕显示。
接着理下一行,这样不断重复,直到文件末。文件内容没有改改变,除非使用了写入的命令,将内容更新。
定址用于决定对哪些行进行编辑。地址的形式可以是数字、正则表达式、或二者的结合。如果没有指定地址,sed将处理输入文件的所有行。
sed 的功能很强大在 脚本中 获取文件的打印,追加,替换 ,删除
我举几个我常用的几个方法场景
使用方法:
打印 输出:
打印对应文件第三行
sed -n '3p' /var/log/yum.log
只查看文件的第3行到第9行
sed -n '3,9p' /var/log/yum.log
过滤特定字符串,显示正行内容
sed -n '/root/p' yum.log
显示包含"hhh"的行到包含"omc"的行之间的行
sed -n '/hhh/,/omc/p' yum.log
仅仅显示匹配字符串的行号
sed -n '/root/p' yum.log
给文件追加文件,写入文件:
sed -i -e '1i happy' -e '$a new year' yum.log
这里需要分析一下 首先 -i 的含义是说是插入的模式 -e 代表多编辑意思,就是说同时修改不同位置文件。 “ 1 i ” 1 的意思代表第一行 i 表示插入,他会插入第一行位置,如果是a 他会插入在第一行的末尾 , ‘ $ a’ $是正则表达式中的一种,表示所有,这个请小伙伴补充一下,正则的知识
在文件第一行和第四行的每行下面添加hahaha
sed '1,4i hahaha' yum.log
有人会想在文件的倒数第二行添加内容实现的方法
sed '$i 你要添加的内容' Group.xml
替换 :
sed -i 's/root/world/g' yum.log
把 文件中的 root 替换 为 world /g是全局的意思 s 查找的意思
sed -i '5,10 s/root/FTL/g' yum.log
替换 5 到 10 行的 root 变为ftl
删除:
删除 3 行到9 行
sed -i '3,9d' /var/log/yum.log
删除包含"hhh"的行到包含"omc"的行之间的行
sed -i '/hhh/,/omc/d' yum.log
详细参数
sed命令功能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
|
sed常见命令参数
1 2 3 4 5 6 7 |
|
1 |
|
sed 中可能遇到的坑
字符转义问题:
1 . 替换 [ ] 时
你想把中括号替换,它是一个不折不扣的叛徒,它需要转义才行 例:
sed 's/\[/aaa/g'
2. 替换(){}时,则不需要
3 记得字符转义