Linux sed 命令的用法
sed 命令
简介
sed
是一个按行处理基本文本的流式处理命令,stream editor 的缩写。它每次只能处理输入文本中的一行,输入的文本可以来自文件或者管道。
sed
常常用于过滤输入的文本,快速的替换等。具体看下面的讲解。
sed 的使用格式
基本格式
sed
使用的基本格式是:
sed OPTIONS… [SCRIPT] [INPUTFILE]
第二个位置是各种选项,SCRIPT 表示对输入处理的脚本,最后是输入文件,如果输入文件为 -
,表示标准输入(stdin),一般指终端输入。
调用选项
-n
默认情况下,sed 会输出它处理每一行后的结果,这个选项就是用于禁止输出。
上图中第一个命令是显示 test.txt 中的内容,这里只有一行
hello world!
。这个第二个命令中p
是一个打印(print)命令,表示把内容打印出来。实际上打印了两行,就是因为 sed 处理p
命令后会把处理的结果输出,处理的命令又是打印命令,所以会输出两行。第三个命令加上-n
选项后,就不会输出处理结果,所以只有一行,就是p
命令处理的行。
-e SCRIPT
这个选项能够对同一个输入运行多次命令。每个命令用
-e SCRIPT
。如下图:上面使用两个
p
命令输出两次。
-f SCRIPT-FILE
对输入处理的命令写在指定的文件中,如把上面的
p
写入文件中。如下图:第一个命令就是显示 SCRIPT-FILE 文件里的内容,只有一个
p
字符。
-i[SUFFIX]
sed 在处理过程中会创建一个临时文件,把处理后结果输出到这个文件中而不是终端中。处理完成后,sed 会把临时文件重命名为原来输入文件的名字。即如果没有
SUFFIX
, sed 会直接覆盖掉原来的文件且不会备份,如果有SUFFIX
,sed 就会备份原来的文件,备份后的文件名就是原来的文件名加上SUFFIX
,然后在把处理后的文本写入原文件。上图中第一个没有加
SUFFIX
,就没有备份文件,第二个加上 ‘-bak’,就把原文件备份到 ’test.txt-bak’文件中。
--follow-symlinks
与
-i
一起使用可以直接修改符号链接指向的文件,否则就会直接修改符号链接。
-E
-r
用扩展的正则表达式代替基本的正则表达式,不同之处参见正则表达式的相关知识。
-s
默认 sed 把指定文件当成一个单一的连续的字符流,
-s
选项能够把它当成一个分隔的文件,暂时没用到过。
退出状态
sed 返回 0 表示处理成功,非 0 表示失败。返回 1 表示格式无效,返回 2 表示输入文件无法打开,返回 4 表示 IO 错误。可以用于脚本中的判断。
sed 的处理脚本语法(SCRIPT)
sed 命令语法
sed 中的脚本部分又称为命令(command),它的语法如下:
[addr]X[options]
X 是一个单个字符的 sed 命令,如上面用到的 p
命令。addr 可选的行的地址,如果指定了 addr,那么命令 X 只会在那些匹配 addr 的行执行。addr 可以是一个单一的行号,行的范围或者正则表达式。
上面的图中,第一个是带行号输出 test.txt 中的内容,第二个中 2,4d
表示删除 2-4 行中的内容,输出就没有 2-4 行了, d
表示删除。
sed 中的常用命令,即上面的 X
a\TEXT
在一行的后面添加
TEXT
。上面就是在一行的后面添加了文本。
c\TEXT
用
TEXT
取代行。
d
删除行,如上面 sed 命令语法中的例子。
e
执行输入文件,把执行结果作为输出。
如 test.sh 脚本中的内容是输出
shell script
,e
命令就是执行脚本后输出执行的结果。
e COMMAND
执行 COMMAND 命令,把结果作为输出。
F
把当前文件的名称打印出来。
g
用空行取代。
上面就是把第五行用空行取代。
G
在每一行下面添加一个空行。
每一行下面都添加了空行。
i\TEXT
在一行的前面插入文本。
l
打印一行,在行的最后加上
p
打印命令,上面已经有很多例子了。
q[EXIT_CODE]
满足退出条件(EXIT_CODE)时退出处理。