文本处理三剑客之sed命令
第十八章、文本处理三剑客之sed命令
目录
- sed介绍
- sed命令常用选项
- sed常用编辑命令
- sed使用示例
- sed高级语法
18.1、sed简介
sed全名stream editor,流编辑器,sed一次处理一行内容,处理时把当前处理的行存储在临时缓冲区中,称为"模式空间",然后根据指定的模式去处理模式空间中的内容,处理完成后,把缓冲区中的内容输出到标准输出,接着处理下一行,不断执行,知道文件末尾,默认不修改原文件。
18.2、常用选项
-n:不输出模式空间中内容至屏幕;
-e:多点编辑,能同时使用多个-e
-f /PATH/TO/SED_SCRIPT_FILE:从指定的文件中读取sed命令,每行一个编辑命令
-r:支持使用扩展正则表达式;
-i:直接编辑原文件;
18.3、地址定界
1、空地址:对全文进行处理;
2、单地址:
#:指定行,#表示数字;
/pattern/:被此模式所匹配到的每一行;
3、地址范围
#,#:#表示数字,例如:sed -n '1,3p'表示第一行到第三行;
#,+#:#表示数字,例如:sed -n '3,+3p'表示从第3行向下加3行不包括第三行;
#,/pattern/:表示从#开始的行开始向下匹配,能够被pattern所匹配到的内容;
/pattern/,/pattern/:表示第一个被pattern匹配到的内容到第二个被pattern匹配到的内容之间的所有内容;
$:表示最后一行;
4、步近
1~2:表示所有奇数行;
2~2:表示所有偶数行;
示例
[root@www tmp]# sed -n '1~2p' test.txt
1
3
5
7
9
[root@www tmp]# sed -n '2~2p' test.txt
2
4
6
8
10
18.4、常用编辑命令
d:删除
p:显示模式空间中的内容;
a \text:在被pattern匹配到的行后面追加文本"text";
i \text:在被pattern匹配到的行前面追加文本"text";
c \text:把匹配到的行替换为此处指定的文本"text";
w /PATH/TO/SOMEFILE:保存模式空间匹配到的行至指定的文件中;
r /PATH/FROM/SOMEFILE:读取指定的文件内容至当前文件被模式匹配到的行后面;文件合并;
=:为模式匹配到的行打印行号;
!:条件取反;
s:查找替换,其分隔符可自定义,常用的有:s@@@, s###;
替换标记:
g:全局替换;
w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中;
p:显示替换成功的行;
18.5、示例
练习1:删除/boot/grub/grub2.cfg文件中所有以空白字符开头的行的行首的空白字符;
[root@www tmp]# sed 's/^[[:space:]]\+//g' /etc/grub2.cfg
练习2:删除/etc/fstab文件中所有以#开头的行的行首的#号及#后面的所有的空白字符;
[root@www tmp]# sed 's@^#[[:space:]]*@@g' /etc/fstab
练习3:输出一个绝对路径给sed命令,取出其目录,其行为类似dirname;
[root@www tmp]# echo "/var/log/messages" | sed 's@[^/]\+/\?$@@g'
/var/log/
练习4、找出/etc/passwd文件中daemon用户所在行的行号;
[root@www tmp]# sed -n '3p' /etc/passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@www tmp]# sed -n '/^daemon/=' /etc/passwd
3
练习5:找出nginx访问日志中20:35到21点之间的所有日志;
[root@www nginx]# sed -n "/\[29\/Dec\/2016:20:35:.* +0800\]/,/\[29\/Dec\/2016:21:.*:.* +0800\]/"p access.log
192.168.1.160 - - [29/Dec/2016:20:35:28 +0800] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.21 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "-"
192.168.1.106 - - [29/Dec/2016:21:12:36 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36" "-"
18.6、sed高级编辑命令
h:把模式空间中的内容覆盖至保持空间中;
H:把模式空间中的内容追加至保持空间中;
g:把保持空间中的内容覆盖至模式空间中;
G:把保持空间中的内容追加至模式空间中;
x:把模式空间中的内容与保持空间中的内容互换;
n:覆盖读取匹配到的行的下一行至模式空间中;
N:追加读取匹配到的行的下一行至模式空间中;
d:删除模式空间中的行;
D:删除多行模式空间中的所有行;
示例
sed -n 'n;p' FILE:显示偶数行;
sed '1!G;h;$!d' FILE:逆序显示文件的内容
sed '$!d' FILE:取出最后一行
sed 'n;d' /etc/fstab:显示奇数行;
sed 'G' FILE:在原有的每行后面添加一个空白行;
文本处理三剑客之sed命令的更多相关文章
- 文本处理三剑客之 Sed ——一般编辑命令
sed简介 sed (stream editor for filtering and transforming text) 是Linux上的文本处理三剑客之一,另外两个是grep和awk. sed又称 ...
- Linux实战教学笔记12:linux三剑客之sed命令精讲
第十二节 linux三剑客之sed命令精讲 标签(空格分隔): Linux实战教学笔记-陈思齐 ---更多资料点我查看 1,前言 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件 ...
- day14 linux三剑客之sed命令
day14 linux三剑客之sed命令 sed命令 Sed 主要用来自动编辑一个或多个文件.简化对文件的反复操作.编写转换程序等. sed(流式编辑器) : sed主要用来修改文件. 1.sed命令 ...
- Shell三剑客之sed命令
Sed简介 Sed是Stream Editor(流编辑器)缩写,是操作.过滤和转换文本内容的强大工具,常用功能有增删改查. Sed命令执行流程 Sed语法格式 Sed [option] ‘[匹配][处 ...
- Linux文本处理三剑客之sed
推荐新手阅读[酷壳]或[骏马金龙]开篇的教程作为入门.骏马兄后面的文章以及官方英文文档较难. [酷壳]:https://coolshell.cn/articles/9104.html [骏马金龙-博客 ...
- linux三剑客之sed命令
一.前言 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件等等.如果我们相对这些文件进行一些编辑查询等操作时,我们可能会想到一些vi,vim,cat,more等命令.但是这些命令 ...
- 文本处理三剑客之sed
sed 1.简介 sed是一种流编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(patternspace),接着用sed命令处理缓冲区中的内 ...
- 文本处理三剑客之 sed详解
1.简介 sed是非交互式的编辑器,它不会修改文件,除非使用shell重定向来保存结果.默认情况下,所有的输出行都被打印到屏幕上. sed编辑器逐行处理文件(或输入),并将结果发送到屏幕.具体过程如下 ...
- 【OS_Linux】三大文本处理工具之sed命令
1.sed命令的简介及用法 sed:即为流编辑器,“stream editor”的缩写.他先将源文件读取到临时缓存区(也叫模式空间)中,再对满足匹配条件的各行执行sed命令.sed命令只针对缓存区中的 ...
随机推荐
- DOM getElementsByClassName IE兼容方案
平时写HTML时多用class来命名,为很少用id来命名,主要原因就是class使用起来比较灵活. 但是万恶的JS在操作DOM的时候对ie6+只提供了getElementById和getElement ...
- PagerSlidingTabStrip介绍及使用,让ViewPager更绚丽
转载请注明出处http://blog.csdn.net/harryweasley/article/details/42290595,谢谢. 以前一直想着,ViewPager中间的那个横线怎么跟着屏幕的 ...
- vue-router(2.0)
用Vue.js+vue-router创建单页应用是比较简单的.使用Vue.js时,我们就已经把组件组合成一个应用了,当你要把vue-router加进来,只要配置组件和路由映射,然后告诉vue-rout ...
- 【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇四:关于OneNote入库处理以及审核
篇一:WPF常用知识以及本项目设计总结:http://www.cnblogs.com/baiboy/p/wpf.html 篇二:基于OneNote难点突破和批量识别:http://www.cnblog ...
- 让BASH,VIM美美的Powerline
前言 鉴于BASH及其周边强大的工具以及VIM高效快捷,加上现在我工作重心转移到前端开发上,因此我华丽地转向Linux阵营(当然从最傻瓜式的Ubuntu开始啦!).但BASH和VIM默认样式确实颜值 ...
- 线程安全性:num++操作为什么也会出问题?
线程的安全性可能是非常复杂的,在没有充足同步的情况下,由于多个线程中的操作执行顺序是不可预测的,甚至会产生奇怪的结果(非预期的).下面的Tools工具类的plus方法会使计数加一,为了方便,这里的nu ...
- 针对每种Windows Server 操作Excel、Word等Office组件遇到“ComException"、”80070005“等COM错误的解决方案大汇总
以下所有Excel错误的解决方案,同样适用于Word.PowerPoint等Office产品. 以下解决方案中,如果出现"安装Excel组件",是适用于遇到Excel错误的.如果是 ...
- .Net语言 APP开发平台——Smobiler学习日志:如何实现快速跳转网页
Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 样式一 一.跳转网页代码(Button的Click事件) Private Sub Button1_ ...
- VS2015 Update2中有关cordova和xamarin安装的问题
最近VS2015出了Update2,当然是第一时间进行了安装,中间过程曲折,反复安装卸载n次,也算是获得了一定的安装经验值.现在说一下经常出的问题. Update2里最吸引人的当然是跨平台开发的部分, ...
- iis6.0与asp.net的运行原理
这几天上网翻阅了不少前辈们的关于iis和asp.net运行原理的博客,学的有点零零散散,花了好长时间做了一个小结(虽然文字不多,但也花了不少时间呢),鄙人不才,难免有理解不道的地方,还望前辈们不吝赐教 ...