当我们对文件有编辑的需求时,除了使用编辑器来修改,还可以使用 sed
命令行进行修改。这种方式在 shell 脚本中经常使用
语法
sed script [-Ealn] [-i extension] [file ...]
参数
-e
以选项中指定的script来处理输入的文本文件-f
该选项会将其后文件中的脚本命令添加到已有的命令中。-i
输出到原文件(修改原文件的意思)-n
默认情况下,在应用了所有命令之后,每一行输入都将回显到标准输出。-n选项禁止这种行为,仅显示script处理后的结果
动作
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行。列如:sed -i '1,4c hello world' a.txt
(把 1 到 4 行的内容替换为 hello world)
d :删除,因为是删除啊,所以 d 后面通常不接任何东西;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
s :替换,可以直接进行取代的工作,可以搭配正规表示法。例如 sed -i '1,20s/old/new/g' a.txt
(把 1 )
例子
准备一个文件 a.txt
cat a.txt
# 输出
# aaa
# bbb
# ccc
- 在第一行下插入一条数据
sed -i '1a ddd' a.txt
- 在第一行上插入一条数据
sed -i '1i eee' a.txt
- 把第 1 ~ 2 行数据替换为 hello
sed -i '1,2c hello' a.txt
- 把 bbb 替换为 world
sed -i 's/bbb/world/g' a.txt
最后文件内容为:
cat a.txt
# 输出
# hello
# ddd
# world
# ccc