概览
- sed是一个流编辑器,它可以处理来自文件或者管道的输入流。
- sed的命令格式 :sed [OPTION]… {script} [input-file]…
- 如果不指定输入文件,sed将会处理标准输入的内容
- sed默认将输出写入到标准输出,使用-i选项可以直接编辑输入文件
- sed默认会将所有处理的输入都打印出来(除了被命令d删除的输入),使用 -n 选项可以禁止输出,命令p 可以打印指定的行
# cat ip_list.txt
1 test.sina.com.cn
2 www.sina.com.cn
3 hehe.sina.com.cn
43 haha.sina.com.cn
999 z.sina.com.cn
1 test
2 www
3 hehe
43 haha
999 z
# sed -n 's/www/hadoop/p' ip_list.txt
2 hadoop.sina.com.cn
2 hadoop
- sed会将多个输入文件看作为一个输入流,使用-s选项它会将多个文件分开处理,如下示例:
# cat 1.txt
111
AAA
# cat 2.txt
222
BBB
# cat 3.txt
333
CCC
# sed -n '1p;$p' 1.txt 2.txt 3.txt
111
CCC
# sed -ns '1p;$p' 1.txt 2.txt 3.txt
111
AAA
222
BBB
333
CCC
- 当sed没有使用 -e 或 -f 选项时,sed会将第一个非选项的参数视为脚本,而其后的参数将被视为输入文件;如果sed使用了 -e 或 -f 选项,那所有的非选项参数都被视为输入文件,-e 和 -f 选项可以合并也可以同时出现多次;下面的语句是等价的:
sed ’s/hello/world/’ input.txt > output.txt
sed -e ’s/hello/world/’ input.txt > output.txt
sed --expression=’s/hello/world/’ input.txt > output.txt
echo ’s/hello/world/’ > myscript.sed
sed -f myscript.sed input.txt > output.txt
sed --file=myscript.sed input.txt > output.txt
常用选项
选项 | 解释 |
---|---|
–version | 打印出sed的版本及版权信息 |
–help | 打印出sed的帮助信息 |
-n –quiet–silent | 禁用sed的自动打印功能;当使用命令p时,只会打印被处理的行 |
-e script --expression=script | 可以使用选项指定的命令集来处理输入 |
-f script-file --file=script-file | 可以使用文件中的sed命令来处理输入 |
-i[SUFFIX] –in-place[=SUFFIX] | 1.使用该选项会直接编辑输入文件,也就是说sed会先创建一个临时文件,待处理完成后则将该临时文件重命名为被处理的原始文件名; 2. 使用该选项将默认执行 -s 选项,也就是将多个输入文件当做多个文件来处理; 3. 如果在选项中指定了SUFFIX,则会将原始文件的内容备份到一个新的文件中,新文件的命名是由原来的文件名和SUFFIX组成,另外在使用-i选项的时候如果还有其他的选项,应该将其他选项放在-i之前,否则sed会将其他的选项当做SUFFIX来处理,如我们应该这样执行命令 sed -Ei ’…’ FILE ,如果命令是sed -iE ’…’ FILE 这样的,那么-E选项将不会生效,sed会创建一个名为FILEE的文件来当做备份文件 |
-l N –line-length=N | |
–posix GNU | sed相比POSIX sed会有一些扩展功能,使用该选项将会禁用GNU提供的扩展功能 |
-E -r --regexp-extended | 使用扩展的正则表达式 |
-s --separate | 将多个输入文件视为多个文件来处理,而不是一个连续的输入流 |
-u --unbuffered | |
-z –null-data –zero-terminated | 使用NUL来分隔行,而不是默认的换行符 |
退出状态
- 0 成功
- 1 表示有非法的命令、语法或者正则表达式
- 2 在指定的输入文件中有1个或多个文件无法打开,sed将会继续处理其他的输入文件
- 4 一个 I/O错误,或者在运行时发生的一系列处理错误自定义 使用命令 q 或 Q,可以自定义sed的退出值
# echo | sed 'Q42' ; echo $?
42