`
tenderuser
  • 浏览: 61426 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

sed... 持续更新

 
阅读更多
sed 命令的基本形式为:
  
引用
sed [options] {sed-commands} {input-file}

sed 每次从input-file 读取一行,然后对这一行执行{sed-commands}。执行完后,继续读文件中的下一行,然后对第二行执行sed-commands命令,直到把文件完全读完,结束。

1、打印/etc/passwd 文件中的所有行:
引用
sed -n 'p' /etc/passwd


对于sed命令可以对每一行执行多个sed命令,也可以将sed命令放到sed脚本文件中。
1)将sed命令放到脚本文件中,
引用
sed [options] -f {sed-commands-in-a-file} {input-file}


eg:
  
引用
ledkk@ubuntu:~$ cat test-script.sed
/^root/ p
/^nobody/ p
ledkk@ubuntu:~$
ledkk@ubuntu:~$ sed -n -f test-script.sed /etc/passwd
root:x:0:0:root:/root:/bin/bash
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
ledkk@ubuntu:~$

2)也可以将多个sed命令使用-e 参数链接起来:
eg:
引用
ledkk@ubuntu:~$ sed -n -e '/^root/ p' -e '/^nobody/ p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh


如果需要对每一行执行多个sed命令的时候,可以使用反斜杠将-e所指定的命令断行:
引用
ledkk@ubuntu:~$ sed -n -e '/^root/ p' \
> -e '/^nobody/ p' \
> /etc/passwd
root:x:0:0:root:/root:/bin/bash
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
ledkk@ubuntu:~$

也可以通过使用大括号将多个命令括起来,也可以实现断行的效果:
引用
sed [options] '{
sed-command-1
sed-command-2
}' input-file


eg:
引用
ledkk@ubuntu:~$ sed -n '{
> /^root/ p
> /^nobody/ p
> }' /etc/passwd
root:x:0:0:root:/root:/bin/bash
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
ledkk@ubuntu:~$


sed命令并不修改原文件,他只是简单的将输出打印到标准输出上。如果想保存sed命令所做的处理,可以使用文件重定向来处理:
引用
sed [options] sed-command input-file > filename.txt


2、sed脚本执行的顺序:
1)sed命令会从inputfile 中读取一行文本到 【临时空间】 中去,【临时空间】是一个用来存放从输入文件中读取的行的临时空间。
2)sed将会对【临时空间】中的这一行文本执行sed-command,如果有多个sed-command,将会对【临时空间】中的文本一个接着一个的执行。
3)打印被sed-command处理过的文本行,然后清空【临时空间】中的文本行。
4)重新从input-file中取出下一行,接着步骤1执行,知道到了文件的结束。

3、(p 命令)使用sed 命令 【p】 可以用来打印【临时空间】中的文本行。
sed默认在执行完sed-command命令后,会自动打印【临时空间】中的文本,然而通过【p】命令,可以控制打印的内容。一般来说当是用【p】命令时,需要使用-n 参数挂起sed默认的打印操作,否则将会重复打印【临时空间】中的内容,如下所示:
eg:
引用
ledkk@ubuntu:~$ sed 'p' employee.txt
101,John Doe,CEO
101,John Doe,CEO
102,Jason Smith,IT Manager
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
104,Anand Ram,Developer
105,Jane Miller,Sales Manager
105,Jane Miller,Sales Manager

一般来说,在sed-command命令之前不加地址范围的话,sed-command将会作用到input-file中的每一行上,如果在sed-command命令之前加上地址范围后,可以限制sed-command只作用于指定的行上:
eg:
1) 只打印第二行
引用
ledkk@ubuntu:~$ sed -n '2 p' employee.txt
102,Jason Smith,IT Manager

2) 打印input-file中的1到4行:
引用
ledkk@ubuntu:~$ sed -n '1,4 p' employee.txt
101,John Doe,CEO
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer

3)打印inputfile中的1到最后一行:($ 代表input-file中的最后一行)
引用
ledkk@ubuntu:~$ sed -n '1,$ p' employee.txt
101,John Doe,CEO
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
105,Jane Miller,Sales Manager

我们可以使用【,+ ~】来设置命令的地址范围:
【,】号一般表示一个范围: 【1,2】表示第1、2行
【+ 】号一般和,一起使用:【1,+2】表示从第1行开始,到1+2行结束。
【~】号用来表示略过的行数:
1~2 表示1,3,5,7,9.......
2~2  表示2,4,6,8,10.......
1~3  表示1,4,7,10.....

eg:
只打印奇数行:
引用
ledkk@ubuntu:~$ sed -n '1~2 p' employee.txt
101,John Doe,CEO
103,Raj Reddy,Sysadmin
105,Jane Miller,Sales Manager
ledkk@ubuntu:~$

和使用地址范围来限制sed-command作用的行外,还可以使用正则表达式来限制sed-command作用的行:
eg:
引用
ledkk@ubuntu:~$ sed -n '/Jane/ p' employee.txt
105,Jane Miller,Sales Manager
ledkk@ubuntu:~$


打印从第一个匹配Jane的行开始的4行文本:(如果没有匹配时,将会什么也不打印)
引用
ledkk@ubuntu:~$ sed -n '/Jason/ ,4 p' employee.txt
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer



分享到:
评论

相关推荐

    sed流编辑器的用法

    这会持续监控`log.txt`,并将所有"error"替换为"warning"后实时显示。 通过学习和熟练掌握sed,可以高效地处理文本数据,简化许多日常的文本处理任务。建议查阅`sed1.pdf`和`sed.pdf`这两个文档,深入学习其更多...

    sed中文指南 详细介绍了SED的用法与实例

    5. **循环处理**:这一过程会持续进行,直到所有输入文本行都被处理完毕。 #### 6. 使用SED SED的命令行结构通常分为两部分:编辑指令和文件名。编辑指令决定了SED对文本进行何种类型的编辑操作,而文件名则是指明...

    分布式水沙物理模型CASC2D-SED的应用研究.pdf

    分布式水沙物理模型CASC2D-SED是一种用于模拟河流水流和泥沙运移的高级工具,特别适用于处理复杂的...未来,随着模型的进一步优化和完善,其在洪水预警、水资源可持续利用、生态环境保护等多个领域的应用将会更加广泛。

    Linux四剑客之sed概述和解析.doc

    这个过程会一直持续到文件的最后一行。例如,如果你想删除文件中的特定行,sed会从文件的第一行开始读取,如果遇到符合条件的行,就会执行删除操作。 **sed命令解析** sed命令的基本格式如下: ```bash sed [选项]...

    Linux中sed如何处理文本

    这个过程一直持续到文件的最后一行。 如果sed中有多个编辑命令,它们的顺序会影响处理的结果。例如,sed 's/pig/cow/;s/cow/horse/' test这条命令会先将“pig”替换成“cow”,然后将“cow”替换成“horse”。由于...

    sedsubstr.txt

    sed截取字符串,简单的三个命令,后续会持续更新 定点截取 echo "/ATM/replace/sqldist" | sed s,'/ATM/\(.*\)/sqldist','\1', 输出结果:replace 模糊截取 获取同样的路径为dbspaces echo "/ATM/MAIN1210/sqldist" ...

    Sed、Awk 与 Linux 等价命令代码鉴赏

    24. `tail -f`:持续显示文件的新增内容。`Sed`的实时处理版本为`sed -u '/./!d'`。 25. `tr "\n" " "`:将换行符替换为空格。`Sed`实现为`sed ':a;N;s/\n/ /;ba'`。 26. `tr "A-Z" "a-z"`:将大写字母转换为小写...

    SED手册(中文版)

    这个过程会一直持续到文件的末尾。 总的来说,SED是一个强大且灵活的工具,适用于各种文本处理需求,特别是在需要批量处理和自动化编辑操作的场景中。掌握SED的使用,可以显著提高在文本处理任务上的效率。对于初学...

    SED新西林总部乔迁典礼暨第六届SED Visionary优秀项目评选活动圆满落幕!.docx

    在粤港澳大湾区,一个重要的里程碑事件正悄然发生。2021年4月10日,SED新西林总部乔迁典礼暨第六届SED ...在SED新西林的领导下,我们有理由相信,未来的景观设计将更加注重可持续发展,将更加人性化,也将更加美丽。

    desed:Sed调试器:从舒适的终端取消对sed脚本的神秘化和调试

    7. **Rust编程语言支持**:desed是用Rust开发的,这保证了它的性能和稳定性,并且Rust社区的活跃意味着工具将得到持续更新和改进。 `tui-rs`库是desed实现其终端用户界面的关键,这是一个用Rust编写的轻量级库,...

    SED TRAIN住友机说明书

    4. **市场地位与竞争**:住友在全电动注塑机市场上的成功,得益于其持续的研发投入和技术革新。面对激烈的市场竞争,如法拉克、海天、震雄等品牌的挑战,住友不断优化产品性能,提升服务品质,以保持市场领先地位。 ...

    欧拉公式求圆周率的matlab代码-SEDC-Euler:SEDC高级C#作业,第1部分,共2部分

    欧拉公式求长期率的matlab代码SEDC-Euler ...毕竟,我们通过开源运动的持续存在而生存并从中受益,并且应该习惯于我们的代码也将生活在开源生态系统中。 但是,如果您希望自己的代码保密,并且不向世人展示,请声明。

    perl5.003_07.tar.gz

    Perl是一种高级的、通用的、解释型的、动态的编程语言,它的全称是 Practical Extraction and Reporting Language。Perl 5.003_07 是 Perl 的一个早期版本...同时,持续更新和维护Perl的环境是保持系统安全的重要步骤。

    check_traffic.sh

    1. **安装依赖**:在运行 `check_traffic.sh` 之前,确保你的系统安装了必要的命令行工具,例如`ifconfig` 或 `ip` (在较新的Linux发行版中),以及可能需要的其他依赖,如`awk` 和 `sed`。 2. **配置脚本**:打开...

    Golang 面试题、编程题、Linux 技巧整理、技术调研以及个人学习记录,每天更新 1-2 条。.zip

    在IT领域,特别是软件开发,持续学习和提升个人技能至关重要。这份名为"Golang面试题、编程题、Linux技巧整理、技术调研以及个人学习记录"的压缩包文件显然是一份宝贵的资源,适合那些想要深入理解Go语言、提升Linux...

    常用的shell命令.pptx

    Jenkins是一个持续集成/持续部署(CI/CD)工具,用于自动化各种软件开发任务。以下是一些Jenkins相关的知识点: 1. Jenkins可以通过插件支持Git、SVN等多种版本控制系统。 2. 使用Jenkins构建Android工程,通常会集成...

    ucloner-10.04.6克隆脚本

    此外,由于是旧版Ubuntu,可能需要考虑升级到更现代的版本以获得持续的安全更新和支持。 总的来说,UCloner-10.04.6脚本是IT专业人士在部署多台相同配置Ubuntu系统时的利器,它可以简化流程,提高效率,同时降低...

    Python库 | delegator.py-0.0.1.tar.gz

    3. **数据处理**:通过调用数据处理工具(如`awk`、`sed`)来处理文本数据。 4. **持续集成**:在CI/CD流程中执行构建或部署命令。 ### 注意事项 1. **安全风险**:调用系统命令可能引入安全问题,因此需确保输入...

    xmpp-echo-bot:XMPPJabber回声机器人(用sed编写)

    6. **守护进程化**:为了确保机器人持续运行,通常会将`xmpp-echo-bot`脚本转化为后台服务或者守护进程,即使终端关闭,它也能继续运行。 在`xmpp-echo-bot-master`这个压缩包中,我们可以期待找到以下内容: - `...

Global site tag (gtag.js) - Google Analytics