shell中sed命令如何使用


这篇文章给大家分享的是有关shell中sed命令如何使用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。sed工具:sed是文本流编辑器,逐行对文件的内容进行处理用法:sed [option] … ‘script’ inputfile…选项: -n:静默模式,不输出模式空间的内容至屏幕
-e:实现多点的功能编辑
-f /path/from/script_file:从指定的文件读取编辑脚本
-r:支持使用扩展的正则表达式地址界面方法: (1)不给地址:对全文进行处理
(2)一个地址(单地址) #:指定的行 /pattern/:被引用处模式所能够匹配到的每一行:
(3)地址范围 #,#:从第几行到第几行 #,+#:显示从第几行开始向后的N行 /pat1/,/pat2/:同时匹配2个参数,表示匹配这2个参数之间的所有行 #,/pat1/:表示匹配这2个参数之间的所有行 (4)~:步进 #sed-n‘1~2p’test.txt(第一行开始,每次增加2行,意思就是显示奇数行)
#sed-n‘2~2p’test.txt(从第二行开始显示,每次增加2行,意思就是显示偶数行) 编辑命令: d:删除被地址界定选定的内容 p:显示(打印)模式空间中的内容到屏幕上,只打印符合条件的行,常于-n结合一起使用 atext:在行后面一行追加文本:支持使用n实现多行追加; 例:#sed ‘/^T/a abc’ a.txt itext:在行前面一行追加文本:支持使用n实现多行追加; 例:#sed ‘/^T/i abc’ a.txt ctext:替换匹配到的行: 例:#sed ‘/^T/c abc’ a.txt w/path/to/somefile:保存模式空间中匹配到的内容至指定文件中; r/path/from/somefile:读取指定文件的文本游戏至模式空间中匹配到的行后; =:为模式空间中的行,打印行号; 例:#sed -n ‘/^T/=’ a.txt q:一旦匹配到内容,免费云主机域名则退出;不再往下匹配 !:取反条件;对除了模式匹配到的行以外的行,进行操作; s///:支持使用其它分隔符,s@@@,s###替换标记: g:行内全局进行替换:例:sed-n‘s@r..t@&er@p’/etc/passwd不带g选项,只替换每一行的第一次 #:行内替换,替换第几次出现的匹配的内容,例:sed -n ‘s/Unix/UNIX/2p’ a.txt,把第2次出现的Unix替换 p:如果替换成功,则显示替换成功的行,与-n一起使用 w/path/to/somefile:将替换成功的行保存至指定文件中练习1:删除/boot/grub/grub.conf文件中所有以空白开头的行行首的空白字符
#sed ‘s@^[[:space:]]+@@’ /boot/grub/grub.conf
练习2:删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符 #sed’s@^#[[:space:]]+@@’/etc/fstab练习3:echo一个绝对路径给sed命令,取出其基名: #echo”/etc/sysconfig”|sed’s@[^/]+$@@’练习4:批量修改文件名字 #ls *.jpg | sed ‘s#(.*)_finished(.*).*#mv & 12#g’ | bash高级编辑命令: h:把模式空间中的内容覆盖至保持空间中; H:把模式空间的内容追加至保持空间中; g:从保持空间取出数据覆盖至模式空间; G:从保持空间取出数据追加至模式空间; x:把模式空间中内容与保持空间中的内容进行互换操作; n:读取匹配到的行的下一行覆盖至模式空间; N:读取匹配到的行的下一行追加至模式空间; d:删除模式空间中的所有行; D:删除多行模式空间中的第一行; 示例用法:
#sed-n‘n;p’test.txt(输出偶数行)
#sed‘n;d’test.txt(只显示奇数行) #sed‘$!d’test.txt(最出文件最后一行) #sed‘G’test.txt(在每一行下面加一个空白行) #sed‘/^$/d;G’test.txt(每行间只保留一个空白行) #sed’1!G;h;$!d’test.txt(逆行显示文件内容) #sed‘$!N;$!D’test.txt(读文件的后2行) #sed-n‘1!G;h;$p’test.txt(逆行显示文件内容)保持空间使用的一个例子: 需求:把单词the和statement之间的单词的全部改为大写
原文: find the Match statement
consult the Get statement
using the Read statement to retrieve data
sed写法:/the .*statement/{hs/.*the (.*)statement.*/1/y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/Gs/(.*)n(.*the ).*( statement.*)/213/} 结果: find the MATCH statement Consult the GET statement using the READ statement to retrieve data 解析:
/the .*statement/:匹配这种模式的行,然后进行修改 h:将匹配到的内容覆盖至保持空间,保留一份复本 s/.*the (.*)statement.*/1/:在模式空间中将匹配到行转换为要改变的单词 y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/:将修改后的单词转换为大写 G:把保持空间的复本追加到模式空间 s/(.*)n(.*the ).*( statement.*)/213/:将修改为大写的单词替换到原语句中的单词感谢各位的阅读!关于“shell中sed命令如何使用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

相关推荐: 怎么将日志文件和二进制文件快速导入HDFS

这篇文章主要讲解了“怎么将日志文件和二进制文件快速导入HDFS”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么将日志文件和二进制文件快速导入HDFS”吧!首选数据移动方法如果在旧版Hadoop环境中运行,我们…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 02/02 18:42
下一篇 02/02 18:43