sed
(stream editor)是Linux中一个非常强大的文本处理工具,用于对文本进行过滤和替换。它特别擅长执行基于模式的替换、删除和插入操作。适合简单的文本替换、删除特定行、插入文本等任务
以下是一些常用的 sed
使用技巧:
-
基础替换:
使用s
命令来替换文本。例如,将文件中所有的 “old” 替换为 “new”:sed 's/old/new/g' filename
-
行号替换:
只替换特定行号的文本:sed '10s/old/new/' filename
-
范围替换:
替换某个范围内的文本:sed '10,20s/old/new/' filename
-
使用正则表达式:
使用正则表达式进行更复杂的替换:sed 's/[0-9]*old/new/g' filename
-
原地编辑:
直接修改文件而不是输出到标准输出:sed -i 's/old/new/' filename
-
追加文本:
在文件末尾追加文本:echo 'new line' | sed 's/^/appended line /' >> filename
-
删除行:
删除包含特定文本的行:sed '/old/d' filename
-
打印行号:
打印文件中每一行的行号:sed -n 's/^/行号: /p' filename
-
多文件处理:
对多个文件执行相同的sed
命令:sed 's/old/new/' file1 file2 file3
-
使用模式空间:
sed
将输入文本分成多个模式空间,每个模式空间包含一行。使用N
命令将多行合并到一个模式空间中:sed ':a;N;$!ba;s/\n/ /g' filename
-
使用保持空间:
sed
的保持空间可以存储文本,使用h
命令将模式空间的内容复制到保持空间,使用g
将保持空间的内容复制到模式空间:sed ':a;s/old/new/;t;h;ba' filename
-
使用标签:
使用标签跳转到sed
脚本中的特定位置:sed ':a;s/old/new/;ta' filename
-
转义特殊字符:
如果需要替换的文本包含正则表达式的特殊字符,需要使用反斜杠\
进行转义:sed 's/\*old\*/new/' filename
-
打印不匹配的行:
只打印不包含 “old” 文本的行:sed '/old/!p' filename
-
使用
sed
进行列操作:
将制表符分隔的列进行操作,例如将第二列替换为 “new”:sed 's/^.*\t.*\t.*$/第一列\tnew\t第三列/' filename
这些只是 sed
的一些基本用法。sed
非常灵活,可以通过编写复杂的脚本来执行更高级的文本处理任务。