1. 准备一个非空文件
首先应该知道,sed无法操作空文件,因此如果文件为空,则需要先添加内容。
如果没有非空文件,可以使用echo指令先创建一个:
echo 'Hello Linux' > Hello.txt
cat Hello.txt
2. 常用语法
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
常用参数说明:
-n, --quiet, --silent
:仅显示script处理后的结果-e script, --expression=script
:以选项中指定的script来处理输入的文本文件-f script-file, --file=script-file
:以选项中指定的script文件来处理输入的文本文件-i[SUFFIX], --in-place[=SUFFIX]
:直接修改源文件(如果提供SUFFIX则进行备份)-h
或--help
:显示帮助-V
或--version
:显示版本信息
动作说明:
a
:新增(Append),a
的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~i
:插入(Insert), i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);d
:删除(Delete),因为是删除,所以 d 后面通常不接任何内容;s
:替换(substitute),可以直接进行取代的工作!通常这个 s 的动作可以搭配正规表示法:s/regexp/replacement/
,例如:1,20s/old/new/g
注:上述仅列出了常用的参数和动作,完整的请使用man sed
或者sed -h
获取
3. 查
查询这里使用cat:
cat Hello.txt
结果为:
Hello Linux
4. 增
4.1. 先重定向到临时文件再覆盖
执行如下指令:
sed -e 1a\newLine Hello.txt
或者把\
去掉也行,直接就是:
sed -e 1anewLine Hello.txt
执行完毕之后会提示
Hello Linux
newLine
但是查看文件却发现并没有更改,此时怎么办呢?我们可以先重定向到一个临时文件:
sed -e 1a\newLine Hello.txt > Hello.txt.temp
然后再用临时文件覆盖原文件:
mv Hello.txt.temp Hello.txt -f
4.2. 直接修改源文件
如果想直接修改源文件,而没有先修改后覆盖的过程,可以用下面的命令:
sed -i 1a\newLine Hello.txt
这样,就直接修改了Hello.txt
文件,再次查看时同样会发现已经修改:
cat Hello.txt
Hello Linux
newLine
4.3. 包含空格的字符串处理
如果要添加的内容包含空格怎么办呢?这是我们只需要把所添加的字符串使用双引号包起来就可以了,比如我想要添加一个new Line
,那么相应的指令为:
sed -i 1a"new Line" Hello.txt
5. 删
删除第2行:
sed -i 2d Hello.txt
查看
cat Hello.txt
会发现原先的第二行内容已删除
Hello Linux
6. 改
将Hello Linux
/I am Coco
改成:
sed -i 's/Hello Linux/I am Coco/g' Hello.txt
查看
cat Hello.txt
会发现已经更改:
I am Coco