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’
在一行的后面添加文本。
上面就是在一行的后面添加了文本。
‘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)时退出处理。