在linux环境中,除了常用的ll、ls、less等查看命令外,sed和awk是处理文本的强大工具。它们能够以简单的方式完成复杂的文本编辑任务。接下来,我将详细介绍sed和awk的使用方法。
sed是一个非常实用的文本处理工具,通常以行为单位进行操作,可以对数据进行替换、删除、新增和选取等操作。sed既可以处理标准输入,也可以处理文件,并将结果输出到标准输出或文件中。以下是sed的一般使用规则:
sed -nefri '动作命令' 文件或输入
参数说明:
- -n:使用安静模式。通常,sed会将所有STDIN的资料输出到屏幕上,但加上-n后,只有经过sed特殊处理的行或动作才会被输出。
- -e:直接在命令行模式上进行sed的动作编辑。
- -f:将sed的动作命令写在一个文件中,使用-f filename可以执行该文件中的sed动作。
- -r:支持扩展正则表达式语法(默认使用基础正则表达式语法)。
- -i:直接修改读取的文件内容,而不是输出到屏幕。
动作命令:
- a:新增,在当前行之后添加新行内容。
- c:替换,用新内容替换指定范围内的行。
- d:删除,通常不接任何参数,直接删除指定行。
- g:全局,表示在行内全局执行动作,例如替换所有匹配的关键字。
- i:新增,在当前行之前添加新行内容。
- p:打印,通常与-n参数一起使用,输出选定的行。
- s:替换,用于直接进行替换操作,常与正则表达式搭配使用。
新增与删除功能
sed可以根据行号进行删除操作。例如,列出文件内容并删除第2-5行:
可以看到标准输出中少了第2-5行,最后一行可以用“$”表示。这里省略了-e参数,因为默认就是在命令行模式下操作。也可以根据关键字删除,例如删除包含“CHEN”的行:
但此时文件内容并未被更改,若要删除原文件内容并保存,可以使用-i参数:
注意,尽管前三行被删除,行号仍然从第一行开始,因为nl处理的是文件而不是标准输出。接下来,我们展示如何新增新行内容:
可以明显看出a和i两个新增命令的区别。可以通过“+回车”来添加多行内容:
替换与显示功能
sed的p命令可以根据行号显示内容,例如显示文件中的第5-7行:
c命令可以进行整行内容替换,例如将文件第2-4行的重复内容替换为“reduplicates”:
s命令可以查找关键字并进行替换,可以结合正则表达式使用。例如,将文件中所有的“:”替换为“;”:
其中,g表示全局替换,即每一行中的所有匹配都进行替换。如果不加g,则只替换找到的第一个关键字:
sed还可以直接处理文件,在处理多文库数据时,常需替换重复的barcode,如下所示:
上面的例子中,第一条命令将替换结果保存为新文件,而后两条命令则直接修改原文件。其中,“^”表示只替换行首出现的关键字。