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