手机版
你好,游客 登录 注册 搜索
背景:
阅读新闻

实用的sed高级命令

[日期:2018-08-18] 来源:Linux社区  作者:kexiaoke [字体: ]

sed基础命令在工作中会经常用到,大家都很熟悉了。sed有一些非常实用的高级命令,用的比较少,就比较容易忘记,所以记录一下,以后忘记了可以来查看。

n 跳过当前行,读取下一行

nl passwd |sed -n '{n;p}'

{} 花括号

可以在花括号里面执行多个命令用;分隔。列如
nl passwd |sed -n '{n;p}' #打印偶数行

& 替换固定字符串

例如要把字符串xiaoke替换成xiaoketest,可以使用
sed 's/xiaoke/xiaoketest/' test.txt 或者
sed 's/xiaoke/&test/' test.txt

元字符\u \l \U \L :转换为大写/小写字符

\u 将首字符转成大写
\U 将所有字符转成大写

使用()获取正则匹配的内容,使用\1 获取第一个括号的内容,使用\2获取第二个括号里面的内容

例如:获取passwd文件的用户名
使用()获取到用户名字段

sed 's/\(^[a-z-]\+\):.*/\1/' passwd

使用( )替换部分字符

例子1: 把w1w2w3替换w1

echo "w1w2w3"|sed 's/w1\(w2\)w3/\1/'
注意:()和\(\ )的区别为()用于正则里面,\(\ )用户字符

例子2: 把w1w2w3替换为w1w3w2

echo "w1w2w3"|sed 's/\(w1\)\(w2\)\(w3\)/\1\3\2/'

列子3: 从passwd文件文件获取用户名、uid、gid

sed 's#\(^[a-z-]\+\):x:\([0-9]\+\):\([0-9]\+\):.*#\1----\2----\3#' passwd

例子4: 使用sed获取ip地址

方法1:
/sbin/ifconfig |sed -n '/inet.*:172/p'|sed -e 's/inet.*r://' -e 's/Bcast.*$//'|tr -d ' '
方法2:
ifconfig eth0|sed -n '/inet /p'|sed 's/inet \([0-9.]\+\) .*/\1/'|tr -d ' '

注意,在markdown编辑器里面正则部分需要再次转义\符号,不然展示的时候转义符号\会丢失

sed命令---行定位

打印出文件的第十行 (定位单行)

nl passwd |sed -n '10p'

打印出文件的第十到十五行 (多行定位)

nl passwd |sed -n '10,15p'

打印出包含root的行 (单行定位)

nl passwd |sed -n '/root/p'

打印出包含root开始的行到包含games结束的行 (多行定位)

nl passwd |sed -n '/root/,/games/p'

从root开始的行到games结束的行,都不要

nl passwd |sed -n '/root/,/games/!p'

打印出文件非第十行的内容 (单行取反)

nl passwd |sed -n '10!p'

打印出文件的非第十到十五行内容 (多行取反)

nl passwd |sed -n '10,15!p'

步进获取行的内容(从第一行开始步近)

nl passwd |sed -n '1~2p'
结果为1,3,5,7......行

Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址https://www.linuxidc.com/Linux/2018-08/153570.htm

linux
相关资讯       sed  Sed命令  sed高级命令 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款