热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linuxsed的一些简单用法

sed命令:sed(意为流编辑器,源自英语“streameditor”的缩写)是一个使用简单紧凑的编程语言来解析和转换文本
sed命令:

sed(意为流编辑器,源自英语“stream editor”的缩写)是一个使用简单紧凑的编程语言来解析和转换文本Unix实用程序。
sed由贝尔实验室的Lee E. McMahon于1973年至1974年开发,并且现在大多数操作系统都可以使用。sed基于交互式编辑器ed(“editor”,1971)和早期qed(“quick editor”,1965-66)的脚本功能。
sed是最早支持正则表达式的工具之一,至今仍然用于文本处理,特别是用于替换命令。用于纯文本字符串操作和“流编辑”的常用工具还有AWK和Perl 

下面说一些sed的常用的参数:
        首先交代一下我的测试文本:

[oracle@rhel scripts]$ more test1231.log
ORA-01555
ORA-01556
ORA-01557
ORA-01558fortest
ORA-01559ORA-01560
/etc/passwd

 

1. sed '[address]s/str1/str2/flag'
        其中:
            address用来指定操作区间:
                以数字形式指定区间:
                    2------代表只修改第2行

[oracle@rhel scripts]$ sed -n '2s/ORA/ora/p' test1231.log   
ora-01556

                    2,$----代表从第2行开始遍历

[oracle@rhel scripts]$ sed -n '2,$s/ORA/ora/p' test1231.log
ora-01556
ora-01557
ora-01558fortest
ora-01559ORA-01560

                    2,5----代表从第2行到第9行

[oracle@rhel scripts]$ sed -n '2,5s/ORA/ora/2p' test1231.log 
ORA-01559ora-01560

                以文本模式指定区间:
                    /pattern/command 例如:

[oracle@rhel scripts]$ sed -n '/ORA-01559/s/ORA/ora/p' test1231.log 
ora-01559ORA-01560

            flag用来进行标记:
                n-----为1~512之间的数字,表示指定要替换的字符串要出现第几次,才进行替换

[oracle@rhel scripts]$ sed -n '5s/ORA/ora/2p' test1231.log 
ORA-01559ora-01560

                g-----对所有匹配到的内容进行替换

[oracle@rhel scripts]$ sed -n '5s/ORA/ora/g'p test1231.log
ora-01559ora-01560

                p-----会打印与替换命令匹配的行,通常与-n 一起使用

[oracle@rhel scripts]$ sed -n '5s/ORA/ora/2p' test1231.log 
ORA-01559ora-01560

                w file-----将缓冲区中的内容写到指定的 file 文件中

[oracle@rhel scripts]$ sed  '5s/ORA/ora/w a.txt' test1231.log  
ORA-01555
ORA-01556
ORA-01557
ORA-01558fortest
ora-01559ORA-01560
[oracle@rhel scripts]$ more a.txt 
ora-01559ORA-01560

                \n-----匹配第 n 个子串,该子串之前在 pattern 中用 \(\) 指定
                \ -----转义(转义替换部分包含:&、\ 、/等),也可以用;来定界

[oracle@rhel scripts]$ sed -n '6s/\/etc\/passwd/\/etc\/passwdwd/'p test1231.log 
/etc/passwdwd
[oracle@rhel scripts]$ sed -n '6s;/etc/passwd;/etc/passwdwd;'p test1231.log   
/etc/passwdwd

2. sed '[address]d'
        d命令只是对输出结果有效,对文件本身不做修改
        其中:
            address用来指定操作区间,用法同上

[oracle@rhel scripts]$ sed '2,3d' test1231.log
ORA-01555
ORA-01558fortest
ORA-01559ORA-01560
/etc/passwd

3. sed '[address]a\str'   sed '[address]i\str'
        i是在指定行之前插入,a是在指定行之后插入

[oracle@rhel scripts]$ sed  -e '1,3a\ora-00001' -e '5,6i\testora-00002' test1231.log  
ORA-01555
ora-00001
ORA-01556
ora-00001
ORA-01557
ora-00001
ORA-01558fortest
testora-00002
ORA-01559ORA-01560
testora-00002
/etc/passwd

4. sed '[address]c\str' 
        c命令是将匹配到的行替换为str

[oracle@rhel scripts]$ sed  -e '1,3c\ora-00001' -e '5,6c\testora-00002' test1231.log   
ora-00001
ORA-01558fortest
testora-00002

5. sed q
        q命令的作用是使 sed 命令在第一次匹配任务结束后,退出 sed 程序,不再进行对后续数据的处理。

[oracle@rhel scripts]$ sed '2q' test1231.log   
ORA-01555
ORA-01556

6. sed [address]y/str1/str2/
        y命令是对字符进行一对一映射转换的,注意str1和str2的长度要保持一致,否则映射不上会报错

[oracle@rhel scripts]$ sed  '2,4y/ORA/ARO/' test1231.log 
ORA-01555
ARO-01556
ARO-01557
ARO-01558fortest
ORA-01559ORA-01560
/etc/passwd

7. sed [address]r filename
        r命令是将一个文件内容整体插入到指定的行后

[oracle@rhel scripts]$ sed  '2,4r test12312.log' test1231.log  
ORA-01555
ORA-01556
test1
test2
ORA-01557
test1
test2
ORA-01558fortest
test1
test2
ORA-01559ORA-01560
/etc/passwd

        使用$可以插入到数据流的末尾

[oracle@rhel scripts]$ sed  '$r test12312.log' test1231.log    
ORA-01555
ORA-01556
ORA-01557
ORA-01558fortest
ORA-01559ORA-01560
/etc/passwd
test1
test2

另外推荐篇写的比较扎实的博客:https://linux.cn/article-10232-1.html


推荐阅读
  • 一、如果使用默认的1521端口,让实例自动注册到该监听上,那么local_listener无需设置,listener.ora文件按照正常方 ... [详细]
  • 一个不错的JDBC连接池教程(带具体例子)
    1.前言数据库应用,在许多软件系统中经常用到,是开发中大型系统不可缺少的辅助。但如果对数据库资源没有很好地管理(如:没有及时回收数据库的游 ... [详细]
  • shell命令四剑客1.grepUnix中用于文本搜索的工具,它能够接受正则表达式和通配符。也是日常开发调试中用的最多的。用于处理每行的文本grep匹配文本通配符 ... [详细]
  • SSL协议、TLS协议,使用哪一种更安全?
    在金融银行业,保护机密信息的安全至关重要。由于财务记录完全通过在线数据库维护,因此实施保护客户、银行和金融机构免受黑客攻击的安全功能比以往任何时候都更加重要。安全套接字层(SSL) ... [详细]
  • XShell连接不了虚拟机
    本机安装好虚拟机和centeros;使用xshell连接:linuxCouldnotconnectto'127.0.0.1'(por ... [详细]
  • 下载完成之后解压提取jl1.0.0.1.jar这里写图片描述将jl1.0.0.1.jar拷贝到项目中,并添加到Library这里写图片描述4.源代码Tip:由于工程名 ... [详细]
  • 我使用Laravel5时遇到问题.当我运行“phparitsanmigrate”时,我收到了这个错误***************************************A ... [详细]
  • NSSROUND#8[Basic]
    文章目录一、[NSSRound#8Basic]MyDoor二、[NSSRound#8Basic]Upload_gogoggo三、[NSSRound#8Basic]MyPage四、[ ... [详细]
  • packagetest;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOE ... [详细]
  • 下载器,就是一种网络工具,从网络中接收自己想要的数据。下载器是一个网络客户端。它的下载流程无非就是客户端连接服务器端,然后发送资源下载请求 ... [详细]
  • Matlab中利用mex编译Opencv实现画板绘图功能
    图形绘制是标记和可视化数据的重要方法.通过在Matlab中集成画板绘图功能,可为科学计算提供便利.1设置Matlab支持Opencv编译操作系统:麒麟14.04(基于Ubu ... [详细]
  • oracle text db2,从Oracle 到DB2(一)
    在实际的软件项目的开发过程中,特别是在企业的应用系统集成(EAI)项目中广大开发人员经常遇到不同关系型数据库之间的数据移植问题。笔者根据自己在工作中的不同数据库数据移 ... [详细]
  • 1.方法一:采用OleDB读取EXCEL文件:把EXCEL文件当做一个数据源来进行数据的读取操作,实例如下:publicDa ... [详细]
  • 缓冲区溢出实例(一)–Windows
    一、基本概念缓冲区溢出:当缓冲区边界限制不严格时,由于变量传入畸形数据或程序运行错误,导致缓冲区被填满从而覆盖了相邻内存区域的数据。可以修改内存数据,造成进程劫持,执行恶意代码,获 ... [详细]
  • log4cpp概述与使用实例一、log4cpp概述Log4cpp是一个开源的C类库,它提供了C程序中使用日志和跟踪调试的功能,它的优点如下࿱ ... [详细]
author-avatar
集束群
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有