Linux 之 Sed 工具使用

地球胖头鱼 2021-03-08
系统与内网安全 发布于 2021-03-08 10:11:13 阅读 94 评论 0

简介

sed 本身也是一个管线命令,而且 sed 还可以将数据进行取代、删除、新增、撷取特定行等等的功能。

sed 是一种流编辑器,它是文本处理中非常重要的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。

注:sed命令不对原文件进行改变,除非使用 -i 参数;sed命令是一行一行处理的

参数

  • -n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过 sed 特殊处理的那一行(或者动作)才会被列出来。

  • -e :直接在命令行界面上进行 sed 的动作编辑;

  • -f :直接将 sed 的动作写在一个文件内, -f filename 则可以执行 filename 内的 sed 动作;

  • -r :sed 的动作支持的是延伸型正则表达式的语法。(默认是基础正则表达式语法)

  • -i :直接修改读取的文件内容,而不是由屏幕输出。

命令

  • a\ 在当前行下面插入文本

  • i\ 在当前行上面插入文本

  • d 删除选择的行

  • s 替换指定字符

  • p 打印模板块的行

  • r file 从file中读行

  • w file 写入file文件中

  • i 修改原文件内容

使用

行的打印显示

默认显示文件所有的内容

sed  '/root/ROOT/p'  /etc/passwd

只显示发生了改变的行

sed  -n '/root/ROOT/p'  /etc/passwd

查看指定行或指定几行

查看第10行的内容

sed  -n  '10p'  /etc/passwd   

查看5-10行的内容       

sed  -n '5,10p'  /etc/passwd

以字符为单位的替换

将文件中的root替换为ROOT,只替换每行的第一个

sed  's/root/ROOT/' /etc/passwd

将文件中的所有root替换为ROOT

sed  's/root/ROOT/g' /etc/passwd

将文件中每行的第2个root开始替换为ROOT

sed  's/root/ROOT/2g'  /etc/passwd

定界符 /

在sed中使用 / 作为定界符,也可以使用任意的定界符,如:

sed 's:root:ROOT:g'

sed 's|root|ROOT|g'

当定界符出现在样式内部时,需要对其进行转义。

删除

删除前:
$ nl 1.txt
     1    helloworld
     2    haa
     3    12345678
     4    !@#$%^&*(
     5    ASDwexvRSD
     6    ,./]];]{}_()^%
     7    asdasdasd
删除后:
$ nl 1.txt| sed '2,5d'
     1    helloworld
     6    ,./]];]{}_()^%
     7    asdasdasd

获取IP地址

  1. 使用ifconfig获取网卡信息。

  2. 通过inet过滤ip信息

    $ ifconfig|grep 'inet '
         inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255
         inet 192.168.56.101  netmask 255.255.255.0  broadcast 192.168.56.255
         inet 127.0.0.1  netmask 255.0.0.0
  3. 替换前面的inet

    $ ifconfig|grep 'inet '|sed 's/^.*inet//g'
    10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255
    192.168.56.101  netmask 255.255.255.0  broadcast 192.168.56.255
    127.0.0.1  netmask 255.0.0.0
  4. 将netmask到最后都替换掉

    $ ifconfig|grep 'inet '|sed 's/^.*inet//g'|sed 's/ *netmask.*$//g'
    10.0.2.15
    192.168.56.101
    127.0.0.1
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!
请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
地球胖头鱼
未填写
  • 作者发布文章247
  • 作者收获粉丝10
  • 作者收到点赞3
  • 所有文章被收藏了5
  • 博客总访问量排行第2
  • 博客总访问量7.2 万(每日更新)
查看所有博文