sed基础命令在工作中会经常用到,大家都很熟悉了。sed有一些非常实用的高级命令,用的比较少,就比较容易忘记,所以记录一下,以后忘记了可以来查看。
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获取第二个括号里面的内容
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)/132/’
列子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……行