sed编辑器

sed:类似于vim就是一个文本编辑器,按行来进行编辑和排序

grep  sed  awk:都是针对文本内容进行增删改查,sed可以支持正则表达式,扩展正则表达式

sed的原理:读取,执行,显示

读取:读取文本内容之后,读取到的内容存放到临时的缓冲区—模式空间

执行:在模式空间,根据读取的文本内容,按行执行,除非指定行号,否则会遍历执行,依次执行,从上往下执行

显示:执行完之后,把执行结果打印,如果要改变生效,模式空间被修改的内容会写入到指定的文件中。只是操作,但是不最终写入文件,只展示结果,展示玩之后,模式空间的数据会立即删除。

面试题:sed文本内容处理工具

文件过大怎么办:1、split -l       2、split -b      3、cat  文件名  |  sed  仅适用于中型文件

                                                                                 大型文件还是先分割

sed的实际操作   sed  -e  '操作'  文件1  |  -e  '操作'  文件2

只对一个文件操作,可以不加e

常用选项:

-e:条件操作选项

-f:指定脚本文件来处理输入的文件内容,把命令写在脚本里,用脚本里的命令来处理第二个文件里面的内容

-i:立即生效,慎用

-n:显示script处理之后的内容

操作符:

s:替换指定的字符

a:增加,在当前行的下面插入指定内容(操作符要用单引号引起来)

d:删除指定的行

i:增加,在当前行的上面插入新的内容

c:替换整行(用的最多)

y:替换字符,但是替换前后的字符长度必须一致

p:打印

r:使用扩展正则

sed的核心作用就是改,删,增        sed的查功能没有grep强大

查看   sed  ' '  /etc/passwd      或  cat  /etc/passwd  |  sed  ' '

sed自己有一个默认输出, p打印会再来一行

-n:禁止sed的默认输出                    sed  -n  'p ky30.txt  可以显示一行      

sed  -n  '='  ky30.txt  只输出行号     sed  -n  'n;p'  ky30.txt   既显示行号也显示内容

sed  打印指定行,寻址打印  sed  -n  '打印第一行'  ky30.txt       '$p':直接打印最后一行

行号范围内打印:sed  -n  '1,3p'  ky30.txt    打印第一行到第三行

sed  -n  '2,$p'  ky30.txt    打印第二行到最后一行

sed  -n  '2p;$p'   ky30.txt   打印第二行和最后一行

文本过滤模式:对包含指定字符串的内容进行打印    sed  -n  '/o/p'  ky30.txt    所有包含o的行会全部打印

运用基础正则表达式进行打印: sed  -n  '/^root/p'  /etc/passwd   打印以root为开头的行

sed  -n  '/bash$/p'  /etc/passwd   打印以bash为结尾的行

用拓展正则:sed  -r  -n  ' '   /etc/passwd

例:sed  -r  -n  '/(99:){2}/p'  /etc/passwd       (99:) :分组   {2}:出现两次  p:打印

打印包含两个99的所在行

例2:在/etc/passwd 中过滤出要么是root开头,要么是以bash结尾的所在行

sed  -r  -n  '/^root | bash$p'  /etc/passwd

以上为sed的查内容,下面为sed的删内容

第二个面试题:怎么样不进入文件就能删除文件内的内容,即免交互删除

方法一:sed  -i  'd'  文件名 

方法二:cat  /dev/null  >  文件名

指定行号进行删除

sed  -n  '3d:p'  ky30.txt    删除第三行并打印

sed  -n  '1d;3d;p'  ky30.txt  删除第一行和第三行并打印

匹配字符串内容删除:

sed  '/o/d'  ky30.txt   把包含o的内容删除

sed  '/big/d'  ky30.txt   把包含big的内容删除

sed  '/big/!d'  ky30.txt  把除了big的行都删除

sed  '/one/,/six/d'  test.txt  把包含one到six的行都删除并打印剩余行

删除空行:sed  '/^$/d'  ky30.txt  

sed替换:

s:替换字符串      

c:整行替换

y:单字符替换,注意替换和被替换的两个字符长度要保持一致

例:sed  -n  's/root/test/p'  /etc/passwd  只替换当前行的第一个root

sed  -n  's/root/test/2p'  /etc/passwd  替换当前行两个root

sed  -n  's/root/test/gp'  /etc/passwd  把所有root都替换为test

把以root开头的行注释掉

sed  -n  '/^root/  s/^/#/p'  /etc/passwd

字母字符大小写替换   :

小写替换成大写   sed  's/[a-z]/\u&/g'  ky30.txt

大写换小写          sed  's/[A-Z]/\l&\g'   ky30.txt

l&:转换成小写的特殊符号,在使用时需要转义符 \

u&:转换成大写的特殊符号

g:全部替换,如果不加,只会更改首位字符

整行替换:sed  '/abc/c  def '  ky30.txt   把abc替换成def

y:单字符替换  sed  'y/12/34/'  ky30.txt      y用的较少

增加:

a:在下一行添加   i:在上一行添加   r:在行后读入指定文件的内容

sed  '/bg/a   123 ky30.txt  在下添加

sed  '/bg/i   123  ky30.txt   在上添加

sed  '/bg/r   ky31.txt'   ky30.txt   在bg这行下面添加ky31.txt里面的内容

ky31.txt:要读取内容的文件   ky30.txt:要指定操作的文件

位置交换:

 把bg和ky30的位置交换

把ergedagesange按照dage erge sange排序

把123456按654321排序

面试题:查看11.30到12点的日志内容

sed  -n  '/Jul  20  11:30:01/,/Jul  20  12:00:01/p'  var/log/messages

修改网卡地址

sed '/IPADDR=192.168.88.10/c /IPADDR=10.0.0.10/'  /etc/......

你可能感兴趣的:(编辑器,linux,运维)