Attend 2020-02-01
在日常工作中,我们往往会在使用Unix/Linux系统时遇到一些处理复杂文本的情况, 这些文本直接处理可能会比较麻烦,往往会花费我们很多时间,给我们的工作带来一定的困扰。事实上,Unix/linux系统提供了一些强大高效的文本处理工具来帮助我们进行复杂文本的处理, 掌握这些工具的使用可以事半功倍。
本文主要对linux三剑客(sed, awk, grep)之一的sed工具进行介绍,并对该工具的使用进行简单的说明。
sed, 全称 stream editor, 是一种非交互式的流向编辑器,该工具主要是通过脚本来处理文本的,可以通过脚本中的指令来自动处理、编辑一个或者多个文件,简化对文本的反复操作,具有强大的文本处理能力。另外,sed可以配合正则表达式进行使用, 大大增加了该工具的可用性。
sed命令处理文本是按行进行处理的,每次处理时将当前行读入并存储到临时缓冲区中,该缓冲区被称为“模式空间”,然后sed命令会根据参数指定的操作对缓冲区中的内容进行处理,完成之后再送往终端显示,接着处理下一行, 不断重复直到文件结束。sed本质上一个管道命令,可以对标准输入进行分析,编辑,替换,删除等操作。
在使用sed时,需要先确定需要进行编辑的文本行,即定址,地址的形式可以是数字、正则表达式或者二者的结合,如果没有指定处理的地址,sed默认处理输入文件的所有行。
sed [-hnV][-e<script>][-f<script文件>][文本文件]
(1)-V或--version 显示版本信息;
(2)-e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件;
(3) -h或 -help 用于显示帮助信息;
(4) -n、–quiet、–silent:只输出明确处理过的内容;
(5) -i 修改文件内容;
(6) -r 不需要转义, 即支持扩展型正则表达式;
(7) -f :直接将sed的动作写在一个文件内,-f filename 则可以执行file内的sed动作;
a\:新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行);
c\:取代, c 的后面可以接字串,多行时除最后一行外,每行末尾需用"\"续行;
i\ :在当前行之前插入文本。多行时除最后一行外,每行末尾需用"\"续行,注意与a\的区别;
d: 删除指定的行;
p :打印,也就是将某个选择的数据打印出来,通常参数-p与参数-n搭配使用;
s: 替换,直接使用一个字符串替换另一个字符串
= :打印当前行号; # 把注释扩展到下一个换行符以前
具体使用实例可以参考以下相关资料,这里不做详细展开,后续使用时查阅即可:
https://blog.csdn.net/hdyebd/article/details/83617292
https://www.runoob.com/linux/linux-comm-sed.html
https://www.cnblogs.com/ftl1012/p/sed.html