zoukankan      html  css  js  c++  java
  • Linux sed 命令总结

    一、sed格式命令

    sed 命令行格式为:sed [选项] 'command' 输入文本

    二、sed命令的选项

    sed [选项] [动作]
    
    选项与参数:
    -n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
    -e :直接在命令列模式上进行 sed 的动作编辑;
    -f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
    -r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
    -i :直接修改读取的文件内容,而不是输出到终端。
    功能说明:
    a :新增行, a 的后面可以是字串,而这些字串会在新的一行出现(目前的下一行)
    c :取代行, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行
    d :删除行,因为是删除,所以 d 后面通常不接任何参数,直接删除地址表示的行;
    i :插入行, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
    p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
    s :替换,可以直接进行替换的工作,通常这个 s 的动作可以搭配正规表示法,例如 1,20s/old/new/g 一般是替换符合条件的字符串而不是整行
    
    一般function的前面会有一个地址的限制,例如 [地址]function,表示我们的动作要操作的行。下面我们通过具体的例子直观的看看sed的使用方法。

    三、Sed定位

    Sed命令在没有给定的位置时,默认会处理所有行;

    Sed支持以下几种地址类型:

    1、first        ----          step

    这两个单词的意思:first 指起始匹配行,step指步长,例如:sed -n 2~5p 含义:从第二行开始匹配,隔5行匹配一次,即2,7,12.。。。。

    2、$

    这个$符表示匹配最后一行。

    3、/REGEXP/

    这个是表示正则那一行,通过//之间的正则来匹配

    4、cREGEXPc

    这个是表示匹配正则那一行,通过c和c之间的正则来匹配,c可以是任意字符

    5addr1add2
    定址 addr1add2 决定用于对哪些行进行编辑。地址的形式可以是数字、正则表达式或二者的结合。如果没有指定地址, sed 将处理输入文件中的所有行。如果定址是一个数字,则这个数字代表行号,如果是逗号分隔的两个行号,那么需要处理的定址就是两行之间的范围(包括两行在内)。范围可以是数字,正则或二者组合。

    6addr1+N

    addr1 这行到往下 N 行匹配,总共匹配 N+1

    四、Sed的正则表达式

                                   表 1sed 的正则表达式元字符

    元字符 功 能 示 例 示例的匹配对象
    ^ 行首定位符 /^love/ 匹配所有以 love 开头的行
    $ 行尾定位符 /love$/ 匹配所有以 love 结尾的行
    . 匹配除换行外的单
    个字符
    /l..e/ 匹配包含字符 l、后跟两个任意
    字符、再跟字母 e 的行
    * 匹配零个或多个前
    导字符
    /*love/ 匹配在零个或多个空格紧跟着
    模式 love 的行
    [] 匹配指定字符组内
    任一字符
    /[Ll]ove/ 匹配包含 love Love 的行
    [^] 匹配不在指定字符
    组内任一字符
    /[^A-KM-Z]ove/ 匹配包含 ove,但 ove 之前的那
    个字符不在 A K M Z
    的行
    (..) 保存已匹配的字符
    & 保存查找串以便在
    替换串中引用
    s/love/**&**/ 符号&代表查找串。字符串 love
    将替换前后各加了两个**的引
    用,即 love 变成**love**
    < 词首定位符 /<love/ 匹配包含以 love 开头的单词的
    > 词尾定位符 /love>/ 匹配包含以 love 结尾的单词的
    x{m} 连续 m x /o{5}/ 分别匹配出现连续 5 个字母 o
    至少 5 个连续的 o、或 5~10
    连续的 o 的行
    x{m,} 至少 m x /o{5,}/
    x{m,n} 至少 m x,但不
    超过 n x
    /o{5,10}/

     表 2.sed 的常用选项

    选项 说明
    -n 使用安静模式,在一般情况所有的 STDIN 都会输出到屏幕上,加入-n 后只打印
    sed 特殊处理的行
    -e 多重编辑,且命令顺序会影响结果
    -f 指定一个 sed 脚本文件到命令行执行,
    -r Sed 使用扩展正则
    -i 直接修改文档读取的内容,不在屏幕上输出

    五、Sed 操作命令

    sed 操作命令告诉 sed 如何处理由地址指定的各输入行。如果没有指定地址, sed 就会处理输入的所有的行。表 3.sed 命令

    命 令 说 明
    a 在当前行后添加一行或多行
    c 用新文本修改(替换)当前行中的文本
    d 删除行
    i 在当前行之前插入文本
    h 把模式空间里的内容复制到暂存缓存区
    H 把模式空间里的内容追加到暂存缓存区
    g 取出暂存缓冲区里的内容,将其复制到模式空间,覆盖该处原有内容
    G 取出暂存缓冲区里的内容,将其复制到模式空间,追加在原有内容后面
    l 列出非打印字符
    p 打印行
    n 读入下一输入行,并从下一条命令而不是第一条命令开始处理
    q 结束或退出 sed
    r 从文件中读取输入行
    对所选行意外的所有行应用命令
    s 用一个字符串替换另一个

    表 4.替换标志

    g 在行内进行全局替换
    p 打印行
    w 将行写入文件
    x 交换暂存缓冲区与模式空间的内容
    y 将字符转换为另一字符(不能对正则表达式使用 y 命令)

     六、sed使用实例

    数据准备
    northwest       NW      Charles Main    3.0     .98     3       34
    western         WE      Sharon Gray     5.3     .97     5       23
    southwest       SW      Lewis Dalsass   2.7     .8      2       18
    southern        SO      Suan Chin       5.1     .95     4       15
    southeast       SE      Patricia Hemenway       4.0     .7      4       17
    eastern         EA      TB Savage       4.4     .84     5       20
    northeast       NE      AM Main Jr.     5.1     .94     3       13
    north           NO      Margot Weber    4.5     .89     5       9
    central         CT      Ann Stephens    5.7     .94     5       13

    1、打印:p命令

    命令p是打印命令,用于显示模式缓存区的内容。默认情况下,sed把输入行打印在屏幕上,选项-n用于取消默认打印操作。当选项-n和命令p同时出现时,sed可打印选定的内容

    案例一:当仅仅出现p打印命令时,sed 把所有输入行都打印在标准输出上。如果在某一行匹配到 northsed就把该行另外打印一遍(如红色标记)。 

    [root@master mnt]# sed '/north/p' sedTest.txt 
    northwest       NW      Charles Main    3.0     .98     3       34
    northwest       NW      Charles Main    3.0     .98     3       34
    western         WE      Sharon Gray     5.3     .97     5       23
    southwest       SW      Lewis Dalsass   2.7     .8      2       18
    southern        SO      Suan Chin       5.1     .95     4       15
    southeast       SE      Patricia Hemenway       4.0     .7      4       17
    eastern         EA      TB Savage       4.4     .84     5       20
    northeast       NE      AM Main Jr.     5.1     .94     3       13
    northeast       NE      AM Main Jr.     5.1     .94     3       13
    north           NO      Margot Weber    4.5     .89     5       9
    north           NO      Margot Weber    4.5     .89     5       9
    central         CT      Ann Stephens    5.7     .94     5       13
    [root@master mnt]# sed -n '/north/p' sedTest.txt 
    northwest       NW      Charles Main    3.0     .98     3       34
    northeast       NE      AM Main Jr.     5.1     .94     3       13
    north           NO      Margot Weber    4.5     .89     5       9

    案例二:当p打印命令和n同时出现时

    说明:默认情况下, sed 打印当前缓存区中的输入行。命令 p 指示 sed 将再次打印该行。选项-n 取消 sed 取消默认打印操作。选项-n 和命令配合使用,模式缓冲区内的输入行,只被打印一次。如果不指定-n 选项, sed 就会像上例中那样,打印出重复的行。如果指定了-n,则sed 只打印包含模式 north 的行。 

    [root@master mnt]# sed -n '/north/p' sedTest.txt 
    northwest       NW      Charles Main    3.0     .98     3       34
    northeast       NE      AM Main Jr.     5.1     .94     3       13
    north           NO      Margot Weber    4.5     .89     5       9

    2、删除:d命令

    命令d用于删除输入行。sed先将输入行从文件复制到缓存区,然后对该行执行sed命令,最后将模式缓存区的内容显示在屏幕上。如果发出的是命令d,当前模式缓存区的输入行会被删除,不被显示。但是在文件中该行是没有被删除的。

    案例三:

    删除第 3 行。默认情况下,其余的行都被打印到屏幕上。 

    [root@master mnt]# sed '3d' sedTest.txt 
    northwest       NW      Charles Main    3.0     .98     3       34
    western         WE      Sharon Gray     5.3     .97     5       23
    southern        SO      Suan Chin       5.1     .95     4       15
    southeast       SE      Patricia Hemenway       4.0     .7      4       17
    eastern         EA      TB Savage       4.4     .84     5       20
    northeast       NE      AM Main Jr.     5.1     .94     3       13
    north           NO      Margot Weber    4.5     .89     5       9
    central         CT      Ann Stephens    5.7     .94     5       13

    案例4:

    删除从第三行到最后一行内容,剩余各行被打印。地址范围是开始第 3 行,结束最后一行。 

    [root@master mnt]# sed '3,$d' sedTest.txt 
    northwest       NW      Charles Main    3.0     .98     3       34
    western         WE      Sharon Gray     5.3     .97     5       23

    案例5:所有包含模式 north 的行都被动删除,其余行被打印。

    [root@master mnt]# sed '/north/d' sedTest.txt 
    western         WE      Sharon Gray     5.3     .97     5       23
    southwest       SW      Lewis Dalsass   2.7     .8      2       18
    southern        SO      Suan Chin       5.1     .95     4       15
    southeast       SE      Patricia Hemenway       4.0     .7      4       17
    eastern         EA      TB Savage       4.4     .84     5       20
    central         CT      Ann Stephens    5.7     .94     5       13

    3、替换:s命令

    命令 s 是替换命令。替换和取代文件中的文本可以通过 sed 中的 s 来实现, s 后包含在斜杠中的文本是正则表达式,后面跟着的是需要替换的文本。可以通过 g 标志对行进行全局替换
    案例 6: 

    s 命令用于替换。命令末端的 g 表示在行内全局替换;也就是说如果每一行里出现多个west,所有的 west 都会被替换为 north。如果没有 g 命令,则只将每一行的第一 west 替换为 north

    [root@master mnt]# sed 's/west/north/g' sedTest.txt 
    northnorth       NW      Charles Main    3.0     .98     3       34
    northern         WE      Sharon Gray     5.3     .97     5       23
    southnorth       SW      Lewis Dalsass   2.7     .8      2       18
    southern        SO      Suan Chin       5.1     .95     4       15
    southeast       SE      Patricia Hemenway       4.0     .7      4       17
    eastern         EA      TB Savage       4.4     .84     5       20
    northeast       NE      AM Main Jr.     5.1     .94     3       13
    north           NO      Margot Weber    4.5     .89     5       9
    central         CT      Ann Stephens    5.7     .94     5       13

    案例7:

    s 命令用于替换。选线-n 与命令行末尾的标志 p 结合,告诉 sed 只打印发生替换的那些行;也就是说,如果只有在行首找到 west 并替换成 north 时才会打印此行。

    [root@master mnt]# sed -n 's/^west/north/p' sedTest.txt 
    northern         WE      Sharon Gray     5.3     .97     5       23
  • 相关阅读:
    showModalDialog()、showModelessDialog()方法使用详解
    Oracle 8i在GNU/Linux上的安装笔记
    TURBOLinux 7.0下安装Oracle 8.1.7.0.1 release 3
    [Oracle]初识Oracle8i(8.0.5)
    (三)
    退出win不保存设置
    Windows 2000/NT/XP管理员密码丢失解决方法
    DCOM错误:DefaultLaunchPermssion 访问被拒绝
    找到一些工具
    O/R MAP 和 ObjectSpaces 资料
  • 原文地址:https://www.cnblogs.com/yfb918/p/10671034.html
Copyright © 2011-2022 走看看