文本三剑客之sed

文本三剑客之sed_第1张图片

目录

一、sed编辑器的介绍

二、sed命令的常用选项

整行替换  C

字符替换 y

 添加

文本模式过滤行内容

方式一:对包含的字符串进行过滤打印 

 方式二:应用基础正则表达式进行打印

 方式三:使用扩展正则表达式进行打印


一、sed编辑器的介绍

sed 即 Stream EDitor,和 vi 不同,sed是行编辑器

sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,
称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。
接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等
sed 流编辑器的工作过程
sed的工作流程主要包括读取、执行和显示三个过程:

读取: sed从输入流 (文件、管道、标准输入) 中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space )。

执行: 默认情况下,所有的sed命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed命令将会在所有的行上依次执行。

显示: 发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。在所有的文件内容都被处理完成之前,上述过程将重复执行, 直至所有内容被处理完。

在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。

注意:默认情况下所有的sed命令都是在模式空间内执行的,

因此输入的文件并不会发生任何变化,除非使用"sed -i"修改源文件、或使用重定向输出到新的文件中。

二、基本操作格式

sed -e '操作'  文件1   文件2  
sed -e '操作'   文件1   文件2
sed -f   脚本文件   文件1  文件2
sed -i -e '操作'  文件1  文件2

三、sed命令的常用选项

-e 或--expression=:表示用指定命令来处理输入的文本文件,只有一个操作命令时可省略,一般在执行多个操作命令使用
-f 或--file=:表示用指定的脚本文件来处理输入的文本文件。
-h 或--help:显示帮助。
-i  直接修改目标文本文件 慎用
-n  仅显示script处理后的结果

sed命令的操作符 
s:替换,替换指定字符。ky27 kyy27
d:删除,删除选定的行。
a:增加,在当前行下面增加一行指定内容。
i:插入,在选定行上面插入一行指定内容。
c:替换,将选定行替换为指定内容。
y:字符转换,转换前后的字符长度必须相同。
p:打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,
则以 ASCII 码输出。其通常与“-n”选项一起使用。
=:打印行号。
l(小写L):打印数据流中的文本和不可打印的ASCII字符(比如结束符$、制表符\t)
r:扩展正则表达式

清空文件:

  • cat /dev/null  &> [文件]
  • sed -i   'd'  [文件] 

sed命令进行文本内容替换

  • sed -n  's/[被替换掉内容]/【替换内容】'  【文件】 #单独的一个p,每一行出现的第一个进行替换
  • sed  -n  's/root/test/gp'  【文件】  全量替换
  • head -n 2 | sed -n 's/root/test/2p'    【文件】#将第二个root替换

整行替换  C

C

sed '/one/c 【替换内容】'  【文件】 

字符替换 y

 sed   'y/【被替换内容】/【替换内容】'   【文件】

被替换的内容与替换内容的长度相同

 添加

a:在当前的下一行添加内容

i:在当前行的上一行添加内容

r:在当前行的行尾添加内容

sed   '【当前内容】/ 【操作符】 【添加内容】'  【文件】

 sed   '$a 【内容】'  【文件名】  #在最后一行添加

sed  '$r 【内容】'  【文件名】     #把另一个文件内容插入到另一个文件的底行

sed   '$i 【内容】'    【文件名】   #在最后一行上面添加

文本三剑客之sed_第2张图片

 文本三剑客之sed_第3张图片

 文本三剑客之sed_第4张图片

文本三剑客之sed_第5张图片

n在p前面,跳过一行,打印下一行,就是偶数行;在后面,就是打印第一行,然后跳过一行,形成奇数行 

 文本三剑客之sed_第6张图片

文本模式过滤行内容

方式一:对包含的字符串进行过滤打印 

文本三剑客之sed_第7张图片

 方式二:应用基础正则表达式进行打印

[root@localhost sed]#sed -n  '/^root/p' /etc/passwd  --以root为开头的所有内容,全文本搜索
[root@localhost sed]#sed -n  '/bash$/p' /etc/passwd  --以bash结尾的所有内容,全文本搜索
[root@localhost sed]#sed -n  '4,/bash$/p' /etc/passwd  --从第四行开始,一直打印到第一个以bash为结尾的所在行

文本三剑客之sed_第8张图片

 方式三:使用扩展正则表达式进行打印

注意: 
sed -r 支持扩展正则表达式。同时在 使用{n}、{n,}、{n,m}时,括号{}前不需要加反斜杠\ 。

文本三剑客之sed_第9张图片

你可能感兴趣的:(大数据)