Linux sed
注意:所有匹配需要用单引号
一、获取最后一行内容
docker images | grep "none" | sed -n '$'p
二、获取第一行内容
docker images | grep "none" | sed -n '1'p
三、获取第一行到最后一行内容
docker images | grep "none" | sed -n '1,$'p
四、替换操作: s命令
sed 's/book/books/' file
五、全面替换标记g
sed -i 's/book/books/g' file
六、定界符
1、以上命令中字符 / 在sed中作为定界符使用,也可以使用任意的定界符:
sed 's:test:TEXT:g' file
sed 's|test|TEXT|g' file
2、定界符出现在样式内部时,需要进行转义。
sed 's/\/bin/\/usr\/local\/bin/g'
七、删除操作:d命令
1、删除空白行:
sed '/^$/d' file
2、删除文件的第2行:
sed '2d' file
3、删除文件的第2行到末尾所有行:
sed '2,$d' file
4、删除文件最后一行:
sed '$d' file
5、删除文件中所有开头是test的行:
sed '/^test/'d file
八、已匹配字符串标记&
1、正则表达式 \w\+ 匹配每一个单词,使用 [&] 替换它,& 对应于之前所匹配到的单词:
echo this is a test line | sed 's/\w\+/[&]/g'
[this] [is] [a] [test] [line]
2、所有以192.168.0.1开头的行都会被替换成它自已加localhost:
sed 's/^192.168.0.1/&localhost/' file
192.168.0.1localhost
九、子串匹配标记\1
1、匹配给定样式的其中一部分:
echo this is digit 7 in a number | sed 's/digit \([0-9]\)/\1/'
this is 7 in a number
2、命令中 digit 7,被替换成了 7。样式匹配到的子串是 7,\(..\) 用于匹配子串,对于匹配到的第一个子串就标记为 \1,依此类推匹配到的第二个结果就是 \2,例如:
echo aaa BBB | sed 's/\([a-z]\+\) \([A-Z]\+\)/\2 \1/'
BBB aaa
3、love被标记为1,所有loveable会被替换成lovers,并打印出来:
sed -n 's/\(love\)able/\1rs/p' file