sed1:基础知识

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CPP_MAYIBO/article/details/84484183

sed基础知识

概览

  • 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

猜你喜欢

转载自blog.csdn.net/CPP_MAYIBO/article/details/84484183
今日推荐