sed命令基础及高级用法

简介:

sed工具:sed是文本流编辑器,逐行对文件的内容进行处理

用法:sed [option] ... 'script' inputfile...

选项:

  -n:静默模式,不输出模式空间的内容至屏幕

  -e:实现多点的功能编辑

  -f /path/from/script_file:从指定的文件读取编辑脚本

  -r:支持使用扩展的正则表达式

地址界面方法:

  (1)不给地址:对全文进行处理

  (2)一个地址(单地址)

    #:指定的行

    /pattern/:被引用处模式所能够匹配到的每一行:

  (3)地址范围   

    #,#:从第几行到第几行

    #,+#:显示从第几行开始向后的N行

    /pat1/,/pat2/:同时匹配2个参数,表示匹配这2个参数之间的所有行

    #,/pat1/:表示匹配这2个参数之间的所有行

  (4)~:步进

         #sed -n 1~2p test.txt(第一行开始,每次增加2行,意思就是显示奇数行)

   wKioL1alnKTgHi-xAAAOMdzPE2U512.png

   #sed -n 2~2p test.txt(从第二行开始显示,每次增加2行,意思就是显示偶数行)

   wKiom1alnImw_VKlAAAMWugNcPc102.png

编辑命令:

  d:删除被地址界定选定的内容

  p:显示(打印)模式空间中的内容到屏幕上,只打印符合条件的行,常于-n结合一起使用

  a \text:在行后面一行追加文本:支持使用\n实现多行追加;

    例: #sed '/^T/a \abc' a.txt

  i \text:在行前面一行追加文本:支持使用\n实现多行追加;

    例:# sed '/^T/i \abc' a.txt

  c \text:替换匹配到的行:

    例:# sed '/^T/c \abc' a.txt

  w /path/to/somefile:保存模式空间中匹配到的内容至指定文件中;

  r /path/from/somefile:读取指定文件的文本游戏 至模式空间中匹配到的行后;

  =:为模式空间中的行,打印行号;

    例:#sed -n '/^T/=' a.txt

  q:一旦匹配到内容,则退出;不再往下匹配

  !:取反条件;对除了模式匹配到的行以外的行,进行操作;

  s///:支持使用其它分隔符,s@@@,s###

替换标记:

  g:行内全局进行替换:例:sed -n s@r..t@&er@p /etc/passwd  不带g选项,只替换每一行的第一次

  #:行内替换,替换第几次出现的匹配的内容,例:sed -n 's/Unix/UNIX/2p' a.txt,把第2次出现的Unix替换

  p:如果替换成功,则显示替换成功的行,与-n一起使用

  w /path/to/somefile:将替换成功的行保存至指定文件中

练习1:删除/boot/grub/grub.conf文件中所有以空白开头的行行首的空白字符

  #sed 's@^[[:space:]]\+@@' /boot/grub/grub.conf                  

练习2:删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符

  #sed 's@^#[[:space:]]\+@@' /etc/fstab 

练习3echo一个绝对路径给sed命令,取出其基名:        

  #echo "/etc/sysconfig" | sed 's@[^/]\+$@@'

练习4:批量修改文件名字

  #ls *.jpg | sed 's#\(.*\)_finished\(.*\).*#mv & \1\2#g' | bash

高级编辑命令:

  h:把模式空间中的内容覆盖至保持空间中;

  H:把模式空间的内容追加至保持空间中;

  g:从保持空间取出数据覆盖至模式空间;

  G:从保持空间取出数据追加至模式空间;

  x:把模式空间中内容与保持空间中的内容进行互换操作;

  n:读取匹配到的行的下一行覆盖至模式空间;

  N:读取匹配到的行的下一行追加至模式空间;

  d:删除模式空间中的所有行;

  D:删除多行模式空间中的第一行;

  示例用法:

  #sed -n n;p test.txt(输出偶数行)

  #sed n;d test.txt(只显示奇数行)

       #sed $!d test.txt(最出文件最后一行)

  #sed G test.txt(在每一行下面加一个空白行)

  #sed /^$/d;G test.txt(每行间只保留一个空白行)

  #sed '1!G;h;$!d' test.txt(逆行显示文件内容)

  #sed $!N;$!D test.txt(读文件的后2)

  #sed -n 1!G;h;$p test.txt(逆行显示文件内容)

保持空间使用的一个例子:

  需求:把单词the和statement之间的单词的全部改为大写

  原文:

   find the Match statement

   consult the Get statement 

   using the Read statement to retrieve data

  sed写法:

       /the .*statement/{

        h

        s/.*the \(.*\)statement.*/\1/

        y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/

        G

        s/\(.*\)\n\(.*the \).*\( statement.*\)/\2\1\3/

        }

  结果:     

    find the MATCH  statement

  Consult the GET  statement

  using the READ  statement to retrieve data

  解析:

   /the .*statement/:匹配这种模式的行,然后进行修改

   h:将匹配到的内容覆盖至保持空间,保留一份复本

   s/.*the \(.*\)statement.*/\1/:在模式空间中将匹配到行转换为要改变的单词

   y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/:将修改后的单词转换为大写

   G:把保持空间的复本追加到模式空间

   s/\(.*\)\n\(.*the \).*\( statement.*\)/\2\1\3/:将修改为大写的单词替换到原语句中的单词

从这个脚本可以看出,灵活的使用保持空间对于隔离和操作输入行的某部分内容很有用

本文转自激情燃烧的岁月博客51CTO博客,原文链接http://blog.51cto.com/liuzhengwei521/1883236如需转载请自行联系原作者


weilovepan520

相关文章
|
3月前
|
C语言
C 语言文件处理全攻略:创建、写入、追加操作解析
在 C 语言中,您可以通过声明类型为 FILE 的指针,并使用 fopen() 函数来创建、打开、读取和写入文件:
84 0
|
3月前
|
Java 程序员 C#
C# 介绍、应用领域、入门、语法、输出和注释详解
C#(发音为“C-Sharp”)是一种由 Microsoft 创建的面向对象的编程语言,运行在 .NET Framework 上。源于 C 家族,与流行的语言如 C++ 和 Java 相近。首个版本发布于 2002 年,而最新版本,C# 12,于 2023 年 11 月发布
66 0
|
4月前
|
存储 数据处理 API
【C# 控制台】主要讲述以下C#的部分语法,部分基础,做到了解作用
【C# 控制台】主要讲述以下C#的部分语法,部分基础,做到了解作用
|
5月前
|
Linux Shell
Linux常用命令用法及实现方式
3.查找定位文件 (1)pwd命令:pwd命令用于显示用户当前所处的工作目录,英文全称为“print working directory”,输入该命令后按回车键执行即可。 (2)cd命令:cd命令用于切换当前的工作路径,英文全称为“change directory”,语法格式为“cd [参数] [目录]”。 (3)ls命令:ls命令用于显示目录中的文件信息,英文全称为“list”,语法格式为“ls [参数] [文件名称]”。 (4)tree命令:tree命令用于以树状图的形式列出目录内容及结构,输入该命令后按回车键执行即可。
|
6月前
|
缓存 BI Linux
《Linux操作系统编程》第九章 数据查找和筛选工具 : 了解流编辑器sed和报表生成器awk的简单使用
《Linux操作系统编程》第九章 数据查找和筛选工具 : 了解流编辑器sed和报表生成器awk的简单使用
51 0
|
7月前
|
数据采集 搜索推荐 算法
十一、正则表达式详解:掌握强大的文本处理工具(三)
十一、正则表达式详解:掌握强大的文本处理工具(三)
|
运维 Shell Linux
文本三剑客sed高级用法和企业级实战| 学习笔记
快速学习文本三剑客sed高级用法和企业级实战
106 0
|
Shell 网络安全 Perl
2021年11月22号 awk高级用法(下)
2021年11月22号 awk高级用法(下)
92 0
|
Perl
2021年11月18号 awk高级用法(上)
2021年11月18号 awk高级用法(上)
94 0
|
存储 Unix Shell
shell编程05【自定义函数和高级命令】
shell编程05【自定义函数和高级命令】
shell编程05【自定义函数和高级命令】

热门文章

最新文章