ubuntu下sed命令详解

 
          在我写这篇blog之前还有点犹豫,因为像这么著名的命令,sed和awk应该在很多书籍里都有介绍,但是在网上找时,却是寥寥无几...
          sed简介
                          sed是一种非交互式的流编辑器,可动态编辑文件。所谓非交互式是说,sed和传统的文本编辑器不同,并非和使用者直接互动,sed处理的对象是文件的数据流(称为stream/流)。sed的工作模式是,比对每一数据行,若符合样式,就执行指定的操作。
                          sed--version           //查看sed版本
    sed语法
                  sed '操作命令'  操作对象   
          特别注意:sed并不会更改文件内容。sed的工作方式是读取文件内容,经流编辑之后,把结果显示到标准输出。因此,如果想要存储sed的处理结果,得自行运用转向输出将结果存成其他文件。
            sed实例

             用法1:删除某一段范围的数据行
           sed '1,4d'  test.txt
            //把第1到第4行数据删除,剩下的显示出来。d是sed的删除命令
            
            用法2:把含有"La"的数据行删除。
            sed '/La/d' test.txt
            // 把含有La的行删除,剩下的显示出来。其中,/ / 代表搜索之意。
         
           用法3:使用正则匹配
           sed '/[0-9]\{3\}/d'test.txt
           // 把含有"3位数"的行删除,剩下的显示出来,在样式[0-9]\{3\}中,\{3\} 表//要寻找的是3个数字组成的字符串

           用法4:删除空行
           sed '/^$/d' test.txt
           //删除dataf5的空白行。^ 表开头,$ 表尾部,这两者之间没有任何字符,代表该行是一空白行。

          用法5:反向选择
          sed '/La/!d' test.txt
          //把不含有La的行删除,剩下的显示出来,这里的!是否定的意思,表示不符合样式者

        用法6:把含有"样式"的数据行显示出来
        sed '/La/p'  test.txt
        //用途把含有La的行显示出来。其中,p是sed的命令,它会把目前的数据显示出来,但因为sed默认也会显示不符合的数据行,所以,应改用以下指令:
        sed -n '/La/p'test.txt
        //选项-n会抑制sed显示出其他资料行的默认操作,只显示符合样式的数据行。
        //查看指定行内容:sed -n Np test.txt

        用法7:替换
        sed -n 's/La/Oo/p' test.txt
        //这里的s是取代的意思,第一对//中含括的字符串(La)是搜索的目标,第二对//含括的是置换的字符串(Oo)。它会把数据行中的字符串La换成Oo。
        //上面的这种表示替换的时候会出现重复行的问题不重复的行的命令是
        sed s/La/Oo/g test.txt >> outputfile
        注意:上面这个指令,只会更换第一个出现的La而已,如要全部置换,应再加上全局的命令g
        sed -n 's/La/Oo/gp' test.txt

       用法8:替换/删除字符
       sed -n 's/La//p'test.txt
       //把每一行出现的第一个La删除(把La置换成空字符串,就是删除)

       用法9:替换/通配符
       sed 's/^...//' test.txt //把每一行开头的3个字符删除。
      sed 's/...$//' test.txt  //把每一行末尾3个字符删除

      其他用法:
             1.sed -n '/AAA/s/234/567/p'test.txt 
             //找到含有AAA的那一行之后,将234换成567
             2.sed -n '/AAA/,/DDD/s/B/567/p'test.txt
            //将含有AAA到含有DDD的那几行,皆将其中的B换成567

            3.sed -n '2,4s/B/567/p'test.txt
            //从第2行到第4行,皆将其中的B换成567

            4.sed G test.txt
            //在每一行后面增加一空行
            5.sed '/^$/d;G' test.txt
            //将原来的所有空行删除并在每一行后面增加一空行,这样在输出的文本中每一行后面将有且只有一空行
            6.sed 'G;G' test.txt
            //在每一行后面增加两行空行
            7.sed '/regex/{x;p;x;}' test.txt
            //在匹配式样“regex”的行之前插入一空行
            8.sed '/regex/G'
            //在匹配式样“regex”的行之后插入一空行
            9.sed 10q
            //显示文件中的前10行
            10.sed q
            //显示文件中的第一行
           ……
  另外,我今天见到sed -i 的用法
 这里sed命令的-i选项,表示直接操作文件ab.file。这里是文本替换操作,将文件中的所有a都替换为b。
默认情况下,sed 是不会修改文件的,只会将操作结果打印到标准输出(屏幕)。
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux的sed命令是一个用于文本处理的强大工具。它可以根据指定的编辑命令对输入文件进行操作,并输出结果。sed命令的基本语法如下: sed [选项] sed编辑命令 输入文件 其中,选项是可选的,用于控制sed命令的行为。sed编辑命令是指对文本进行操作的具体命令,可以是单个命令,也可以是多个命令组合在一起。输入文件是要进行处理的文本文件。 sed命令还支持通过管道将shell命令的输出作为输入进行处理,具体语法如下: shell命令 | sed [选项] sed编辑命令 此外,sed命令还可以通过-f选项指定一个sed脚本文件来进行处理,具体语法如下: sed [选项] -f sed脚本文件 输入文件 在使用sed命令时,还可以通过使用一些小技巧来实现特定的功能。例如,可以使用命令连接符";"来输出多行不连续的内容。例如,以下命令会输出passwd文件中的第1行、第3行和第5行: sed -n '1p;3p;5p' passwd 这样,你就能够根据需要使用sed命令来处理文本文件,并实现各种需要的操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【Linux篇】sed命令详解](https://blog.csdn.net/weixin_45842494/article/details/124699219)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Linux - sed命令详解](https://blog.csdn.net/qq_48391148/article/details/125711532)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值