sed命令解析

sed 流编辑脚本

语法: sed [OPTION]... {script-only-if-no-other-script} [input-file]...

通常调用sed的格式:

    sed SCRIPT INPUTFILE...

如果指定了标准输入文件,格式大概是这样子:

sed ’s/hello/world/’ input.txt > output.txt
sed ’s/hello/world/’ < input.txt > output.txt

如果没有指定标准输入文件,将会从标准输入中接收文件,大概是这样子:

cat input.txt | sed ’s/hello/world/’ - > output.txt

sed写出的内容到标准输出,使用-i选项可以修改输入的文件内容去替代标准输出:

sed -i ’s/hello/world/’ file.txt

使用-n可以抑制输出,然后配合p命令,可以输出指定的行数:

sed -n ’45p’ file.txt

sed会将多个输入文件,视为一个长文件,例如下面这样会打印one.txt的第一行和three.txt的最后一行:

sed -n ’1p ; $p’ one.txt two.txt three.txt

如果没有-e或-f选项。sed会使用第一个不是选项的参数作为脚本,后面跟的非选项参数作为输入文件。如果-e或-f选项指定了脚本,那所有的非选项参数将会作为输出文件。

下面的示例是等效的:

sed ’s/hello/world/’ input.txt > output.txt

重要的命令行选项:

  • -e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
  • -f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
  • -h或--help 显示帮助。
  • -n或--quiet或--silent 仅显示script处理后的结果。默认情况下,sed在每个循环结束时打印出图案空间脚本(见第37页第6.1节[sed如何工作])。这些选项禁用这种自动打印,sed只在显式地使用p命令时,才会产生输出。
  • -V或--version 显示版本信息。
  • -i 修改输入文件替换输出。

sed脚本语法:

[addr]X[options]
X是sed单个字符命令,[addr] 是行地址,如果指定了[addr],则X只会作用于匹配的行,[addr] 可以是一个行数字,或一个正则的表达式,或行的范围,附加[options] 选项用于某些sed命令。

比如:sed ’30,35d’ input.txt > output.txt
删除30至50行的数据

示例:

sed ’/^foo/q42’ input.txt > output.txt
/^foo/是一个正则表达式,假如匹配到值,退出状态码42;假如没有匹配到值(且没有发生错误)退出状态码0.

下面所有的命令都是等效的。
sed ’/^foo/d ; s/hello/world/’ input.txt > output.txt

sed -e ’/^foo/d’ -e ’s/hello/world/’ input.txt > output.txt

echo ’/^foo/d’ > script.sed
echo ’s/hello/world/’ >> script.sed
sed -f script.sed input.txt > output.txt

echo ’s/hello/world/’ > script2.sed
sed -e ’/^foo/d’ -f script2.sed input.txt > output.txt
sed命令:
  • a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~最好给出行数范围,如果不给出行数,将在每一行的下一行新增数据。
  • c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
  • d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
  • i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
  • p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
  • s :s/regexp/replacement/[flags]    取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
  • { cmd ; cmd ... } 几个命令组
  • g:将样板空间的内容替换为保留空间的内容。
  • H:向保留空间的内容追加一个换行符,然后将样板(模式)空间的内容追加到保留空间的内容。
sed命令中最重要的一个命令s.
在任何给定的s命令中,/字符可以统一替换为任何其他单个字符。只有在/字符前面加上字符时,才能在regexp或替换中出现/字符(或替代它的任何其他字符)。
反斜杠转以后的字母,具有特殊的含义:
  
L
l
U
u
E
Turn the replacement to lowercase until a U or E is found,
Turn the next character to lowercase,
Turn the replacement to uppercase until a L or E is found,
Turn the next character to uppercase,
Stop case conversion started by L or U.

后面的flag,可以有下面这些值(不全,重要的记录):

g:将替换应用于regexp的所有匹配项,而不仅仅是frst。
e:
This command allows one to pipe input from a shell command into pattern space. If a substitution was made, the command that is found in pattern space is executed and pattern space is replaced with its output. A trailing newline is suppressed; results are undefned if the command to be executed contains a nul character. This is a GNU sed extension. 





 


 





 



原文地址:https://www.cnblogs.com/wonchaofan/p/13527138.html