sed 编辑器
定义
sed编辑器被称作流编辑器(stream editor),流编辑器会在编辑器处理数据之前基于 预先提供的一组规则来编辑数据流。
sed 编辑器可以根据命令来处理数据流的数据,这些命令要么从命令行输入,要么存储在一个命令文本文件。
sed编辑器操作
- 一次从输入中读取一行数据
- 根据所提供的编辑器命令匹配数据
- 按照命令修改流中的数据
- 将新的数据输出到STDOUT
- sed编辑器不会修改文本文件的数据,它只会讲修改后的数据发送到STDOUT。
命令
命令格式:sed options script file
命令选项:
- -e script :script就是一连串指令,将script中的指令添加到已有的命令中
- -f file :将file中的命令添加到已有的命令中
- -n: 不产生命令输出,使用print命令来完成输出
例子:
- echo “this is a test” | sed ‘s/test/big test/’:s命令会用斜线间的指定的第二个文本字符串来替换第一个文本字符串模式。结果为:this is a big test
- sed ‘s/dog/cat/’ data1.txt :将data1.txt中的文本中的dog替换成cat
- sed -e ‘s/brown/green/; s/dog/cat/’ data1.txt:将data1.txt中的文本中的brown替换成green和将dog替换成cat
- sed -f script.sed data1.txt :script.sed文件中的命令按行分割,将文件中的命令作用于data1.txt
script 命令详情:
替换标识(substitution flag): 格式 s/pattern/replacement/flags
四种flags:
数字,表明新文本将替换第几处模式匹配的地方
- g,表示新文本将会替换所有匹配的文本
- p,表示原先行的内容要打印出来
w file,将替换的结果写到文件中。
行寻址:如果只想将命令作用于特定行或某些行。
以数字形式表示行区间
- sed ‘2,3s/dog/cat/’ data1.txt :修改文本中的第2-3行,行地址区间
- sed’2,$s/dog/cat/’ data1.txt:修改文本中第二行开始之后的所有行
以文本模式来过滤出行
- sed ‘/Samantha/s/bash/csh’ /etc/passwd: 修改文本中包含Samantha用户的行
命令组合
- sed ’2{
s/fox/edlphant/
s/dog/cat/
}‘ data1.txt : 将文本中的第二行用多个命令修改。
删除行:删除命令d,它会删除匹配指定寻址模式的所有行。
sed ’2,3d’ data.txt
sed ‘/number 1/d’ data.txt:删除匹配number 1的行
插入和附加文本:插入命令(i) 会在指定行前增加一个新行;附加命令(a) 会在指定行后增加一个新行。
sed ‘3i\ this is an inserted line’ data.txt:将文本中第三行前插入一行
sed ‘$a\ this is a new line of text’ data.txt:将新行附加到文本最后一行。
sed ‘li\
this is one line of new text\
this is another line of new text’ data.txt: 在文件开头插入多行文本。
修改行:修改命令c允许修改数据流中整行文本的内容。
sed ‘3c\ this is a changed line of text’ data.txt :将文本中的第三行修改为命令行中的文本
sed ’2,3,c\ this is a new line of text’ data.txt :将文本中的两行文本替换成一行文本。
转换命令:转换命令y是唯一可以处理单个字符的sed编辑器命令,命令格式
y /inchars/outchars/ 转换命令会对inchars 和outchars值进行一一对应,inchars中的第一个字符会被转换为outchars中的第一个字符,第二个字符会被替换成outchars中的第二个字符,如果两者长度不同,则sed编辑器会产生一条错误信息。
echo “this 1 is a test of 1 try.”|sed ‘y/123/456’: 结果:this 4 is a test of 4 try.
回顾打印
打印行,p命令可以打印sed编辑器输出中的一行,类似于s命令中的p模式
- 在命令行上用 -n选项,可以禁止输出其他行,只打印包含匹配文本模式的行
- sed -n ’/number 3/p’ data6.txt :输出文本中包含number3 的行
- 打印行号 ,‘=’命令显示行号
- sed ‘=’ data1.txt :将data文本中的行号都显示出来
列出行,‘l’ 命令。可以打印出数据流中的文本和不可打印的ASCALL字符。
- sed -n ‘l’ data.txt :可以打印出文本中被转义的字符。
写入文件,w命令可以用来向文件写入行。
sed ’1,2w test.txt’ data.txt:将data文件中的1,2行写入test文本中。
读取文件,r命令允许将一个独立文件中的数据插入到数据流中。
sed ’3r data12.txt’ data6.txt :将data12文本中的内容附件到data6第3行之后。