sed 实用实例参考
sed 实用实例参考
多维度架构 - 知乎www.zhihu.com
http://www.netkiller.cn/linux/index.htmlwww.netkiller.cn
sed.sourceforge.net/
查找与替换
find and replace
sed -n 's/root/admin/p' /etc/passwd
sed -n 's/root/admin/2p' /etc/passwd #在每行的第2个root作替换
sed -n 's/root/admin/gp' /etc/passwd
sed -n '1,10 s/root/admin/gp' /etc/passwd
sed -n 's/root/AAA&BBB/2p' /etc/passwd #将root替换成AAArootBBB,&作反向引用,代替前面的匹配项
sed -ne 's/root/AAA&BBB/' -ne 's/bash/AAA&BBB/p' /etc/passwd #-e将多个命令连接起来,将root或bash行作替换
sed -n 's/root/AAA&BBB/;s/bash/AAA&BBB/p' /etc/passwd #与上命令功能相同
sed -nr 's/(root)(.*)(bash)/321/p' /etc/passwd #将root与bash位置替换,两标记替换 或sed -n 's/root.∗bash/321/p' /etc/passwd
ls -1 *.html| awk '{printf "sed 47s/ADDRESS/address/g 47 %s >%s.sed;mv %s.sed %sn", $1, $1, $1, $1;}'|bash
for f in `ls -1 *.html`; do [ -f $f ] && sed 's/</BODY>/<script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script>n<script type="text/javascript">n_uacct = "UA-2033740-1";nurchinTracker();n</script>n</BODY>/g' $f >$f.sed;mv $f.sed $f ; done;
my=/root/dir
str="/root/dir/file1 /root/dir/file2 /root/dir/file3 /root/dir/file/file1"
echo $str | sed "s:$my::g"
正则
sed s/[[:space:]]//g filename 删除空格
aaa="bbb" 提取bbb
$ echo "aaa="bbb"" | sed 's/.*="(.*)"/1/g'
$ curl -s http://www.example.com | egrep -o '<a href="(.*)">.*</a>' | sed -e 's/.*href="([^"]*)".*/1/'
Mac 地址转换
echo 192.168.2.1-a1f4.40c1.5756 | sed -r 's|(.*-)(..)(..).(..)(..).(..)(..)|12:3:4:5:6:7|g'
首字母大写
$ cat /etc/passwd | cut -d: -f1 | sed 's/b[a-z]/U&/g'
Root
Daemon
Bin
Sys
Sync
Games
Man
Lp
Mail
News
Uucp
Proxy
Www-Data
Backup
List
Irc
Gnats
Nobody
Libuuid
Syslog
Messagebus
Whoopsie
Landscape
Sshd
Neo
Ntop
Redis
Postgres
Colord
Mysql
Zookeeper
insert 插入字符
i 命令插入一行,并且在当前行前面有两个空格
在root行前插入一个admin
sed '/root/i admin' /etc/passwd
33 行处插入字符
sed -i "33 i authorization: enabled" /etc/mongod.conf
追加字符
在root行后追加一个admin行
sed '/root/a admin' /etc/passwd
修改字符
将root行替换为admin
sed '/root/c admin' /etc/passwd
删除字符
删除含有root的行
sed '/root/d' /etc/passwd
delete
删除空行
sed /^$/d filename
sed '/./!d' filename
行操作
模式空间中的内容全部打印出来
定位行:
sed -n '12,~3p' pass #从第12行开始,直到下一个3的倍数行(12-15行)
sed -n '12,+4p' pass #从第12行开始,连续4行(12-16行)
sed -n '12~3p' pass #从第12行开始,间隔3行输出一次(12,15,18,21...)
sed -n '10,$p' pass #从第10行至结尾
sed -n '4!p' pass #除去第4行
打印3~6行间的内容
$ sed -n '3,6p' /etc/passwd
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
打印35行至行尾
$ sed -n '35,$p' /etc/passwd
sshd:x:116:65534::/var/run/sshd:/usr/sbin/nologin
mysql:x:117:126:MySQL Server,,,:/nonexistent:/bin/false
uuidd:x:100:101::/run/uuidd:/bin/false
libvirt-qemu:x:118:128:Libvirt Qemu,,,:/var/lib/libvirt:/bin/false
libvirt-dnsmasq:x:119:129:Libvirt Dnsmasq,,,:/var/lib/libvirt/dnsmasq:/bin/false
redis:x:120:130::/var/lib/redis:/bin/false
编辑文件
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if extension supplied)
下面例子是替换t.php中的java字符串为php
$ cat t.php
<?java
$ sed -i 's/java/php/g' t.php
$ cat t.php
<?php
find -name "*.php" -exec sed -i '/<?.*eval(gzinflate(base64.*?>/ d' '{}' ; -print
指定查找替换的行号
sed -i "7,7 s/#server.host: "localhost"/server.host: "0.0.0.0"/" /etc/kibana/kibana.yml
正则表达式
正则:'/正则式/'
sed -n '/root/p' /etc/passwd
sed -n '/^root/p' /etc/passwd
sed -n '/bash$/p' /etc/passwd
sed -n '/ro.t/p' /etc/passwd
sed -n '/ro*/p' /etc/passwd
sed -n '/[ABC]/p' /etc/passwd
sed -n '/[A-Z]/p' /etc/passwd
sed -n '/[^ABC]/p' /etc/passwd
sed -n '/^[^ABC]/p' /etc/passwd
sed -n '/<root/p' /etc/passwd
sed -n '/root>/p' /etc/passwd
扩展正则:
sed -n '/root|yerik/p' /etc/passwd #拓展正则需要转义
sed -nr '/root|yerik/p' /etc/passwd #加-r参数支持拓展正则
sed -nr '/ro(ot|ye)rik/p' /etc/passwd #匹配rootrik和royerik单词
sed -nr '/ro?t/p' /etc/passwd #?匹配0-1次前导字符
sed -nr '/ro+t/p' /etc/passwd #匹配1-n次前导字符
sed -nr '/ro{2}t/p' /etc/passwd #匹配2次前导字符
sed -nr '/ro{2,}t/p' /etc/passwd #匹配多于2次前导字符
sed -nr '/ro{2,4}t/p' /etc/passwd #匹配2-4次前导字符
sed -nr '/(root)*/p' /etc/passwd #匹配0-n次前导单词
管道操作
cat <<! | sed '/aaa=(bbb|ccc|ddd)/!s/(aaa=).*/1xxx/'
> aaa=bbb
> aaa=ccc
> aaa=ddd
> aaa=[something else]
!
aaa=bbb
aaa=ccc
aaa=ddd
aaa=xxx
字母大小写转换
[root@localhost ~]# echo "netkiller" | sed 's/[a-z]/u&/g'
NETKILLER
[root@localhost ~]# echo "NETKILLER" | sed 's/[A-Z]/l&/g'
netkiller
- Android 内存泄露简介、典型情景及检测解决
- [原创]Fluent NHibernate之旅
- 复杂而艰辛的重构之路--起步
- 【强烈推荐】数据库迁移利器:Migrator.Net
- 关于某道C#上机题的OO
- Android 事件处理探险
- Fluent NHibernate RC 1.0 --升级内容
- 驳“反驳老赵之“伪”递归”
- 关于今天很热的--FizzBuzzWhizz
- 了解EF CodeFirst的Migrator功能与Migrator.Net对比
- struts技术的logic标签
- 【翻译】使用Visual Studio创建Asp.Net Core MVC (一)
- 你不知道的Javascript:有趣的setTimeout
- ADO.NET 2.0 中的新增 DataSet 功能
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【React+Typescript+Antd】防止样式感染——LESS CSS 框架简介
- 【React+Typescript+Antd】界面框架布局——Layout布局+ Grid栅格
- SpringBoot源码学习(三)
- Axure RP 9 安装与中文汉化
- Linux 离线安装docker的过程
- Mac环境变量设置(以ADB为例)
- Linux 基础之定时任务
- Git库迁移步骤(从服务器A迁移至服务器B)
- springboot源码解析(四)
- 第2天:网易2018年校园招聘NLP算法工程师笔试试卷分析(二)
- Windows下Scoop安装、配置与使用
- Flutter免费iOS真机调试 AndroidStudio iPhone真机运行教程
- Flutter GridView 网格控件
- Flutter ListView 下拉刷新,上拉加载更多
- Flutter问题:import 'package:english_words/english_words.dart'失败