文本处理三剑客之sed命令
2016-12-29 21:33
183 查看
第十八章、文本处理三剑客之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:在原有的每行后面添加一个空白行;
相关文章推荐
- Linux 基础命令(八)—— 文本处理三剑客之sed
- Linux 基础命令(八)—— 文本处理三剑客之sed
- linux文本处理三剑客(二):sed命令详解
- Linux文本处理三剑客之sed命令
- 文本处理三剑客之sed命令用法
- Linux运维文本处理三剑客之sed命令
- 文本处理三剑客之sed基础用法
- Linux文本处理三剑客之sed
- linux中关于sed命令来处理文本
- linux下文本处理命令sed,awk,grep
- 02-shell文本处理三剑客之sed
- SHELL:awk,sed,常用文本处理命令
- 总结Linux中用于文本处理的awk、sed、grep命令用法
- Shell学习:文本处理流编辑器sed命令用法
- Linux文本处理三剑客之sed
- Shell脚本:1、文本处理的sed命令
- Linux文本处理三剑客之grep和sed
- Linux文本处理“三剑客”之sed
- linux下的文本处理命令sed&awk&grep
- 漫漫运维路——Linux文本处理三剑客之sed