sed(stream editor) 是 Linux 和 Unix 中的一个流编辑器,用来对文本进行插入、删除、替换、查找等操作。它可以处理文本文件或者标准输入,常用于自动化的文本处理、批量文件修改。
sed 的基本语法sed [options] 'command' file
options:可选参数,用来控制 sed 的行为。command:执行的 sed 命令,比如替换、删除等。file:要处理的文件。-e:用于执行多个 sed 命令。-i:直接修改文件(即对文件内容进行原地编辑)。-n:取消默认输出,只输出被处理过的行。-r:启用扩展的正则表达式。-f:从脚本文件中读取 sed 命令。sed 常见命令s/pattern/replacement/:查找并替换匹配的模式。d:删除行。p:打印行。a:在指定行后添加内容。i:在指定行前插入内容。q:在指定行后退出处理。将文件 example.txt 中所有的 apple 替换为 orange:
sed 's/apple/orange/g' example.txt
s:表示替换。/g:全局替换,即一行中所有出现的匹配项都替换。sed 's/apple/orange/' example.txt
这只会替换每行中第一个出现的 apple。
如果你想直接修改文件而不是输出到屏幕,使用 -i 选项:
sed -i 's/apple/orange/g' example.txt
这将直接在文件 example.txt 中将所有 apple 替换为 orange。
只替换文件中的第 2 行:
sed '2s/apple/orange/' example.txt
apple:sed '2,4s/apple/orange/g' example.txt
删除文件中的第 3 行:
sed '3d' example.txt
删除文件中包含 apple 的所有行:
sed '/apple/d' example.txt
只打印包含 apple 的行:
sed -n '/apple/p' example.txt
-n:取消默认输出,只输出匹配到的内容。/pattern/p:表示匹配 pattern 的行并打印。在第 2 行后插入 Hello, World!:
sed '2a Hello, World!' example.txt
在第 3 行前插入 Insert text:
sed '3i Insert text' example.txt
在包含 apple 的行后插入 fruit:
sed '/apple/a fruit' example.txt
删除第 2 行到第 4 行的内容:
sed '2,4d' example.txt
假设文件中有 /home/user 路径,想要替换为 /home/admin,可以使用如下命令:
sed 's/\/home\/user/\/home\/admin/g' example.txt
或者使用其他分隔符避免过多的 \:
sed 's#/home/user#/home/admin#g' example.txt
你可以用 -e 来执行多个命令。例如,将 apple 替换为 orange,并删除包含 banana 的行:
sed -e 's/apple/orange/g' -e '/banana/d' example.txt
假设文件 example.txt 如下:
apple banana apple orange
apple grape apple
要替换第一行的第一个 apple 为 fruit:
sed '1s/apple/fruit/' example.txt
要替换最后一行中的最后一个 apple:
sed '$s/apple/fruit/' example.txt
假设文件 example.txt 的内容如下:
apple banana orange
grape mango peach
你可以使用 sed 和正则表达式将每行的单词顺序反转:
sed 's/\([^ ]*\) \([^ ]*\) \([^ ]*\)/\3 \2 \1/' example.txt
输出:
orange banana apple
peach mango grape