sed 是如何进行文本处理的?
- sed 一次处理一行内容
- sed 不改变文件的内容(除非 重定向 或者 加入
-i
参数)
sed–命令行格式
1sed [options] 'command'file(s)
2
3options: -e ; -n
4
5command: 行定位(正则)+ sed命令(操作)
sed 的打印命令
1p 打印
2
3sed 'p' files.txt #每一行都会重复
4
5加 -n 可以去掉重复项
6
7sed -n 'p' files.txt
间隔行输出
1first~step
2
3sed -n '1~2p'
4输出的行为 1,3,5,7,9
5
sed 行定位
定位一行
1x ; /pattern/
2
3sed -n '10p' files.txt # 打印第十行
4
5sed -n '/mooc/p' files.txt # 匹配正则 /mooc/
定位几行
1x,y; /pattern(正则)/,x;
2
310,20; /news/,/mooc/;
4
5sed -n '10,20p' files.txt #打印10-20行
6
7sed -n '/news/,/mooc/p' files.txt #打印有news到mooc的行
反向定位
sed 操作命令
-a
新增行
1sed '5a =====' #在第五行后面新增 =====
2sed '1,5a ====' #在一到五行后面分布新增 ====
-i
插入行
1sed '5i =====' #在第五行前面新增 =====
2sed '1,5i ====' #在一到五行前面分布新增 ====
-i
直接修改文件
1sed -i /steamcommunity/d /etc/hosts #删除/etc/hosts里面包含steamcommunity的行,不需要重定向。
-c
替代行
1sed '5c =====' #替换第五行为 =====
2sed '1,5c ====' #替换一到五行为 ==== (一到五行的内容都变成====)
-d
删除行
1sed '/mooc/d' #删除mooc的一行
-s
替换 分隔符/,#等
1sed 's/old/new/' files.txt #只替换一个
-g
全局 替换标志
1sed 's/old/new/g' files.txt
-{} 多个 sed 命令,用;分开
1sed '{20,30d;s/false/true}
-n
1sed -n '{p;n}' #输出奇数行
2sed -n '{n;p}' #输出偶数行
-&
替换固定字符串(优化替换操作)
1sed ’s/W/&123/'
2
3&等于W 减少前面的字符输入
-\( \)
替换某种(部分)字符串
1sed -n '/inet /p'|sed 's/inet addr:\([0-9.]\+\).*$/ip address \1/'
2
3ip address 10.135.27.195
-r
复制指定文件插入到匹配行
1sed '1r 123.txt' abc.txt
2
3#复制123.txt的内容插入到abc.txt的第一行后面
4
5#不对源文件进行修改
-w
复制匹配行拷贝指定文件里
1sed '1w abc.txt' 123.txt
2
3#复制123.txt的第一行覆盖abc.txt
4
-q
终止/退出 sed
1
2nl passwd | sed '/false/q' # 查到第一个发false就停止
3
sed 案例
在文件后面增加一行配置文件
1sed '$a sometext' files.txt
2$ 最后增加
3sed '$a text' files.txt
获取服务器里面的 error
1sed -n '/Error/p' files.txt
大小写转换
1元字符 \u \I \U \L 1
2转换为大写/小写字符
脚本格式
1sed -f scriptfile file(s)
取出用户名 uid
1nobody 65534
2libuuid 100
3syslog 101
4messagebus 102
5landscape 103
6ntp 104
7sshd 105
8ubuntu 500
9
10root@VM-27-195-ubuntu:/home/ubuntu# sed 's/\(^[a-zA-Z_-]\+\):x:\([0-9]\+\).*$/\1 \2 /' /etc/passwd