Air.-博客

FlowAir


  • 首页

  • 分类

  • 关于

  • 归档

  • 标签

  • 搜索
close
Air.-博客

sed

发表于 2017-02-13 | 分类于 Linux |

Sed的基本用法

Sed 是一个行编辑器,它可对文本文件和标准输入进行编辑。sed从文本的一个文本行或标准输入中读取数据,将其复制到缓冲区。然后读取命令行或脚本的第一个命令,对此命令要求的行号进行编辑,重复此过程,直到命令行或脚本中的所有命令都执行完成。

格式:

sed [options] 'AddressCommand' file ....

options (选项)

  • -n :静默模式,不再默认显示模式空间中的内容
  • -i :直接修改源文件
  • -e :SCRIPT -e SCRIPT 可以同时执行多个脚本
  • -f :/PATH/TO/SCRIPT
    sed -f /path/to/script file
  • -r :使用扩展正则表达式

Address (地址)

1、StartLine,EndLine (从开始行到结束行)
比如:sed ‘1,100’
2、/RegExp/ (使用正则表达式)
比如:/^root/ (比配一root开头的行)
3、/pattern1/,/pattern2/
从第一次被pattern1匹配到的行开始,至第二次被pattern2匹配到行结束,这中间所有的行。
4、LineNumber (精确匹配某行)
比如 sed ‘2d’ /etc/issue (匹配issue文件下的第2行)
5、StartLine,+N
从StartLine开始,向后的N行

Command (命令)

  • d 删除符合条件的行 如:sed ‘3d’ /etc/fstab
  • p 显示符合条件的行 如:sed ‘4p’ /etc/fstab
  • a\string :在指定的行后面追加新行,内容为string
    如:sed ‘3a#这是一个注释’ /etc/fstab
  • i\string :在指定的行前面添加新行,内容为string
    如:sed ‘2i#这是添加的内容’ /etc/fstab
  • r FILE :将指定的文件的内容添加至符合条件的行处
    如:sed $r /etc/issue /etc/fstab
  • w FILE :将地址指定范围内的内容另存到指定的文件中
    如:sed ‘/root/w /tmp/root.txt’ /etc/fstab
  • s/pattern/string/ :查找并替换,默认只替换每行中第一次被模式匹配到的字符串
    修饰符:
    g 全局替换
    i 忽略字符大小写
    s///==s@@@===s### (///可以使用其它的符号替代)

后向引用

后向引用:
首先,将子表达式包含在( )中。最多包含9个子表达式
然后,使用\digit digit可以是1-9,表示与先前第digit个子表达式匹配
例子:
(ab)(cd)[def]\2\1 abcdcdab、 abcdeeecdab、 abceddeefffcdab、….
(why).
\1 :表示一行里重现两个why
后向引用在寻找重复字一级匹配引号时特别好用:
([“ ‘]).*\1 :表示匹配以单引号或双引号括起来的字,例如”bar”或者‘foo’

练习

1、删除/etc/grub.conf文件中行首的空白符;

sed 's#[[:space:]]##g' /etc/grub.conf

2、替换/etc/inittab文件中“id:3:initdefault:”一行中的数字为5;

[root@bogon ~]# sed 's/id:3:initdefault:/id:5:initadfault:/g' /etc/inittab
或使用后向引用
[root@bogon ~]# sed 's/\(id:\)[0-6]\(:initdefault:\)/\15\2/g' /etc/inittab

3、删除/etc/inittab文件中的空白行;

[root@bogon ~]# sed -n '/[[:alnum:]]/p' /etc/inittab

4、删除/etc/inittab文件中的开头的#号;

[root@bogon ~]# sed  's/#//g' /etc/inittab 

5、删除某文件中开头的#号及后面的空白字符及空白行,但要求#号后面必须有空白字符;

sed  -r 's/^#[[:space:]]?//g' /etc/inittab | sed -n '/[[:alnum:]]/p' 

6、删除某文件中以空白字符后面跟#号,这样类的行中的开头的空白字符及#;

[root@bogon ~]# sed -r 's/^[[:space:]]+#//g' /tmp/inittab

7、取出一个文件路径的目录名称;

[root@bogon bin]# pwd | xargs dirname

取父目录

Air.

Air.

不忘初心,方得始终

1 日志
1 分类
1 标签
RSS
GitHub osChina coding 微博 豆瓣 知乎
友情链接
  • CSDN博客
  • QQ空间
© 2013 - 2017 Air.
由 Hexo 强力驱动
主题 - NexT.Pisces