sed命令 学习笔记

简介:

sed 基本用法

sed : Stream EDitor 行编辑器      (全屏编辑器: vim)

sed: 默认打印模式空间  默认不编辑原文件,仅对模式空间中的数据做处理; 而后,处理结束后,将模式空间打印至屏幕

sed [optiones] 'ADDressCommand' file ...

      -n : 静默模式 不在默认显示模式空间中的内容

       -i : 直接修改原文件

       -e SECRIPT -e SECRIPT : 可以同时执行多个脚本

       -f /PATH/TO/SED_SCRIPT : 添加 "脚本文件" 到程序的运行列表

              sed -f /path/to/scripts file

       -r : 使用扩展正则表达式   ( 默认支持基本正则表达式 )


ADDress  地址表示

1 . StratLine , EndLine   比如 : 1 , 100

  $ 最后一行

  $-1 倒数第二行

2 . /RegExp/   比如 : /^root/

3 . /pattern1/ , /pattern2/      比如 : 第一次被 pattern1 匹配到的行开始, 至第一次被 pattern2 匹配到的行结束,这中间的所有行

4 . LineNumber   指定的行

5 . StartLine, +N      从 StartLine 开始, 向后的 N 行


Command:

d : 删除符合条件的行

1
2
3
4
5
[root@nono ~] # sed '5,$d' /etc/fstab       #删除 /etc/fstab 文件中的第五行到最后一行
[root@nono ~] # sed '/oot/d' /etc/fstab    #删除 /etc/fstab 文件中所有包含 oot 的行
[root@nono ~] # sed '1,+2d' /etc/fstab     #删除 /etc/fstab 文件中,第一行开始并向后两行的内容(3行)
[root@nono ~] # sed '1d' /etc/fstab          #只删除第一行
[root@nono ~] # sed '/^\//d' /etc/fstab     #删除以 / 开头的行, ^\/ '\'为转译(使用字符本身的意义)

p : 显示符合条件的行

1
[root@nono ~] # sed -n '/^\//p' /etc/fstab  #只显示以 '\' 开头的行  -n:不显示模式空间中的内容

a \string : 在指定的行后面追加新行,内容为 "string" 

1
2
[root@nono ~] # sed '/^\//a \#hello word' /etc/fstab    #在 / 开头的行下面,追加 /#hello word
[root@nono ~] # sed '/^\//a \#hello word\n\#hello linux' /etc/fstab #追加两行 \n : 换行符

i \string : 在指定的行前面追加新行,内容为 "string"  用法与 a \string 相同

r FILE : 将指定的文件的内容添加至符合条件的行处

1
2
[root@nono ~] # sed '2r /etc/issue' /etc/fstab   #在 /etc/fstab 的第二行后面,添加文件 /etc/issue 的内容
[root@nono ~] # sed '1,2r /etc/issue' /etc/fstab  #在 /etc/fstab 的第一行,第二行后面分别添加 /etc/issue 的内容

w FILE : 将地址指定的范围内的行另存至指定的文件中

1
[root@nono ~] # sed '/oot/w /tmp/oot.txt' /etc/fstab   #将 /etc/fstab 文件中包含 oot 的行,保存至 /tmp/oot.txt 文件中

s /pattern/string/修饰符 : 表示查找并替换  (默认只替换每行中第一次被模式匹配到的字符串)

         pattern : 可以使用正则表达式的元字符

         修饰符

         g : 全局替换

          i : 查找时忽略字符大小写

          s/// : s### : s@@@  作用相同 

1
2
[root@nono ~] # sed 's@/@#@g' /etc/fstab     #将 /etc/fstab 文件中的 / 替换为 # (g 全局替换)
[root@nono ~] # history | sed 's#^[[:space:]]*##'   #将 history 行首的空格删除 (可以删除多个空白字符)

练习 

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

    sed -r 's@^[[:spapce:]]+@@g' /etc/grub.conf

  2. 删除 /etc/inittab 文件中的空白行

    sed '/^$/d' /etc/inittab

  3. 删除 /etc/inittab 文件中开头的 # 号

    sed 's@^#@@g' /etc/inittab

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

    sed -r 's@^#[[:space:]]+@@g' /etc/inittab

  5. 删除某文件中以空白字符后面跟 # 类的行中的开头的空白字符及#

    sed -r 's@^[[:space:]]+#@@g' /etc/inittab

  6. 取出一个文件路径的目录名称

    echo "/etc/rc.d/" | sed 's@^(/.*/)[^/]+/?@\1@g'

wKiom1eEJWmiaKnnAAAubgOhD9c398.png

本文转自   mlwzby   51CTO博客,原文链接:http://blog.51cto.com/aby028/1825600

相关文章
|
8月前
|
机器学习/深度学习 存储 监控
sed命令(超详细)
是一种流编辑器,它是文本处理中非常好的工具,能够完美的配合正则表达式使用,功能不同凡响。 处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命 令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复, 直到文件末尾。
141 0
|
8月前
|
Perl
sed命令的详解整理
sed命令的详解整理
616 2
|
8月前
|
Perl
awk命令详解整理
awk命令详解整理
245 1
|
10月前
|
Unix Shell Linux
【Shell编程】字符截取命令awk、sed命令
【Shell编程】字符截取命令awk、sed命令
162 0
|
存储 安全 Linux
文件重定向 | 学习笔记
快速学习文件重定向。
117 0
|
Perl 机器学习/深度学习 开发工具
|
Perl Shell