sed命令就是这么简单

💡 原文中文,约5500字,阅读约需14分钟。
📝

内容提要

Sed命令是一个面向字符流的非交互式编辑器,用于批量修改文本内容。sed命令的选项包括-n、-e、-f、-r和-i。sed提供了多种命令,如a、c、d、i、p和s,用于新增、取代、删除、插入、列印和替换行。sed还支持使用正则表达式选出符合条件的行,并对其进行操作。sed还提供了p命令用于搜索并输出行内容。通过添加-n选项,sed可以仅输出经过处理的行。使用-i选项可以直接修改文件内容。在sed正则中,常用的元字符包括$、^、[a-z0-9]、[^]、\(\)、\{m,n\}、.、*、\+、\?和\|。

🔎

延伸解读

sed 的两种工作模式:默认输出与静默输出

sed 默认会把从标准输入读取的所有行都输出到终端,即使你只对部分行做了处理。例如执行 sed '2p' 时,第二行会被额外打印一次,导致重复。加上 -n 选项后,sed 进入静默模式,只输出被 p 命令等显式处理过的行。因此,-n 常与 p 命令搭配使用,用于精确搜索并输出目标行,而删除、替换等命令通常不需要 -n。

s 命令的替换范围:默认只换每行第一个

sed 的 s 命令默认只替换每一行中第一个匹配到的字符串。例如 sed 's/aa/AA/' 对一行中出现的多个 aa,只会替换最前面的那个。若想替换一行内所有匹配项,需要在命令末尾加上 g 选项,写成 s/aa/AA/g。此外,s 命令前的地址限定可以控制替换只发生在指定行、行范围或符合正则的行上,避免全局误改。

地址限定:让 sed 命令精准作用于目标行

sed 的删除、新增、替换、打印等命令前都可以加地址,用来限定操作范围。地址可以是单行号(如 2d)、行范围(如 1,2d 或 5,$d),也可以是正则表达式(如 /^2/d 或 /^[0-9]/s/aa/AA/g)。$ 表示最后一行,m,$ 表示从第 m 行到文件末尾。理解地址写法,才能避免误删或误改整个文件。

-i 选项:直接修改文件前需谨慎

默认情况下,sed 的所有修改只输出到终端,原文件内容不变。使用 -i 选项后,sed 会直接修改读取的文件内容,而不是输出到终端。例如 sed -i '2d' test.txt 会真正删除文件中的第二行。由于该操作不可逆,建议在执行前先不加 -i 预览结果,或提前备份文件,确认无误后再直接修改。

❓

Q&A

sed命令的主要功能是什么?

sed命令是一个非交互式编辑器,用于批量修改文本内容。

如何使用sed命令删除特定行?

使用命令格式m,n d可以删除第m行到第n行的内容。

sed命令中如何进行字符串替换?

使用s/old/new/命令可以替换字符串,添加g选项可进行全局替换。

sed命令的-n选项有什么作用?

使用-n选项后,sed只输出经过处理的行,而不是所有输入行。

如何在sed中添加新行?

使用命令格式n a可以在第n行后添加新行。

sed命令支持哪些正则表达式元字符?

常用的元字符包括$、^、[a-z0-9]、[^]、\\(\\)、\{m,n\}、.、*、+、?和|。

➡️

继续阅读