Sed(Stream EDitor):流编辑器
工作原理:
将文件中的文本逐行取出,在内存中处理,而不是在源文件中处理;sed的加工车间有两个:pattern space和hold space;sed会根据给定的pattern去匹配每行文本,不管匹配成功或失败,默认都会将pattern space中的内容输出至标准输出,如果匹配成功再执行用户给定的编辑命令。
命令格式:
sed [OPTIONS] ... 'script' file...
其中script是地址定界编辑命令的整体
常用OPTIONS:
-n:不输出pattern space中的内容至标准输出
-e script,--expression=script:多点编辑
/*示例*/ sed -e '/^[A]/p' -e '/^[A]/d' test.txt
-f /PATH/TO/SOME/SED_SCRIPT_FILE:每行一个编辑命令
-r:支持使用扩展正则表达式(不加则使用基本正则表达式)
-i[SUFFIX],--in-place[=SUFFIX]:直接编辑源文件
/*示例*/ sed -i '/^[h]/d' test.txt
地址定界:
(1)空地址[什么也不写]:匹配全文
(2)单地址:
#:指定行
/pattern/:被模式匹配到的每一行
/*示例*/ sed -n '2p' test.txt
(3)地址范围:
#,#:第#行到第#行,如1,5
#,+#:如1,+2,从第一行开始,到第三行
#,/pattern/:从#行到被pattern匹配到的行之间的行
/pattern1/,/pattern2/
$:最后一行
(4)步进:~
1~2:所有奇数行
2~2:所有偶数行
编辑命令:
d:删除模式空间(pettern space)中的内容
p:显示模式空间中的内容
a est:在行后面追加文本‘test’,支持使用 实现多行追加
i est:在行前面插入文本‘test’,支持使用 实现多行插入
c est:把匹配到的行替换为此处指定的test
w /PATH/TO/SOMEFILE:保存模式空间中匹配到的行至指定文件中
r /PATH/FROM/SOMEFILE:读取指定文件的内容至当前文件被模式匹配到的行之后,实现文件合并
=:为模式匹配到的行打印上行号
!:条件取反,格式为:地址定界!编辑命令
s///:查找替换,其分隔符可自行定义,常用有s###,s@@@等;
替换标记:
g:全局替换
w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中
p:显示替换成功的行;
/*示例*/ echo "/var/log/message" | sed 's@[^/]+/?$@@'
高级编辑命令
h:把模式空间中的内容覆盖至hold space(保持空间)中
H:把模式空间中的内容追加至hold space(保持空间)中
g:把保持空间中的内容覆盖至模式空间中
G:把保存空间中的内容追加至模式空间中
x:把两个空间中的内容互换;
n:覆盖读取匹配到的行的下一行至模式空间中;
N:追加读取匹配到的行的下一行至模式空间中;
d:删除模式空间中的行;
D:删除多行模式空间中的所有行;