文本处理三剑客:
第一剑:grep、egrep、fgrep 文本搜索工具
第二剑:sed 全称Strema Editor,一种强大的文本编辑器
第三剑:Awk 文本格式化工具,文本报告生成器
本文主要描述第二剑:sed 文本编辑器
Sed是对文件内容进行逐行处理,一行一行的进行。它处理的并不是原数据,而是将目标文件复制以后在处理。
Sed用法:sed [OPTION]... {script-only-if-no-other-script} [input-file]...
script:来指明对文本进行什么样的操作(地址定界+编辑命令)
Sed常用选项:
-n:不输出模式空间中的内容到屏幕上(模式空间:sed工作的地方,对文本进行处理、加工)
(如果配合d命令,则不会显示任何内容。如果配合p命令,则只显示匹配到的内容)
-e:在一个sed中可以编辑多个脚本(运行多个命令)
-f:每行编辑一个命令/PATH/TO/SED_SCRIPT_FILE
-r:支持使用扩展正则表达式
-i:直接编辑原文件
地址定界:
(1)空地址(不指明文本中的某一行):对全文进行处理
(2)单地址(指定一个数字):
#:明确文本中的第几行
/PATTERN/:显示每一行中有此模式的行
(3)地址范围(起始,结束):中间用逗号隔开
#,#:从第几行到第几行
#,+#:显示从#行开始,在显示+#行。
例如:“3,+8” 意思是从第三行开始,再往下显示八行(总共显示了9行)
#,/part/:显示从指定的#行开始直到第一次被模式所匹配到的之间的行
/partten1/,/partten2/:显示第一次被模式匹配和第二次被模式匹配之间的行
(4)步进:
1~2:显示所有的奇数行
2~2:显示所有的偶数行
编辑命令:
d:删除指定的行
例:把wxpp文件中的第2-5行删除掉
p:指定的行显示2次
例:把wxpp文件中奇数行显示2次
a: 在匹配到的行下方追加文本(模式:\text);多行追加(\text\ntext)
例:在wxpp文件中的第三行追加2行“wtc xi huan wxpp”“wxpp xi huan wtc”
如果想全文都追加“wtc xi huan wxpp”,把命令中的地址定界“3”删除掉即可,如下图
i:在匹配到的行上方插入本文(模式:\text)
例:在wxpp文件中的第3行插入“wtc xi huan wxpp”
c:把匹配到的行替换为指定的文本(模式:\text)(注意:整行替换)
例:把wxpp文件中第2-5行换成“wxpp xi huan wtc”
注意:把2-5行换成“wxpp xi huan wtc”是把2-5行看成一个整体,替换为“wxpp xi huan wtc”
w:把模式空间中的内容保存在指定的文件中
例:把/etc/stab中以UUID的开头的行保存知道/tmp/wtc中
r:把指定文件的内容加入到匹配模式行的后面(文件合并,把一个文件中的内容穿插到另一个文件中)
例:把wtc中的内容穿插到wxpp中的第四行后面
=:把匹配到的行前面加上行数
例:给fstab中以UUID开头的行注明是第几行
!:条件取反(写在模式后面)
例:删除fstab下面以非#开头的行
s///:查找替换。其分隔符可以自行制定,常用的有s@@@、s###等。
例:删除fstab文件中以#号开头的行。(把#号替换成什么都没有)