sed 是如何进行文本处理的?

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