Linux三剑客之sed
1. 文本处理命令
# 补充知识点
1. sort命令
默认根据第一个字母排序
用于将文件内容加以排序
-n 依照数值的大小排序
-r 以相反的顺序来排序
-l 以某列进行排序
-t 以指定分隔符,默认是以空格为分隔
2. uniq命令
cat xx.txt | uniq
用于检测以及删除文本文件中重复出现的行列,一般与"sort"命令结合使用
# 先排序再去重,不然只会去除相邻的重复的行列
-c 在每列旁边显示该行重复出现的次数
-d 仅显示重复出现的行列
-u 仅显示出现一次的行列
3. cut命令
cat xx.txt | cut -d '|' -f2
cut命令用来显示行中的指定部分,删除文件中的指定字段
-d 指定字段的分隔符,默认的字段分隔符为"tab"
-f 显示指定字段的内容-fn
4. tr命令
cat xx.txt | tr 123 345
# 非整体替换,所有的1,2,3替换成3,4,5
替换或删除命令
-d 删除字符
5. wc命令
wc -l xx.txt
统计,计算数字命令
-c 统计文件的Bytes数
-l 统计文件的行数
-w 统计文件中单词的个数,默认以空白字符作为分隔符
"注:"在Linux系统中,一段连续的数字或字母组合为一个词。
2. Linux三剑客之sed
sed是Linux中,流媒体编辑器。
stream Editor
grep:用来过滤文本
sed :用来修改文本
awk :用来处理文本
1. "sed格式:"
sed [参数] "处理规则" [操作对象]
2. "参数:"
-e 运行多项编辑
-n 取消默认输出
# sed -e '3d' -e '6d' -n xx.txt
-i 就地编辑
# sed -i '5p' 4.txt
-r 支持拓展正则
# sed -r '/123/d' 4.txt
-f 指定sed匹配规则脚本文件
# 文件中定义了匹配规则r.txt
"""
vim r.txt
sed -f r.txt xx.txt
"""
3. "定位:"#(非常重要)
1. 数字定位法
指定行号
sed '3d' xx.txt # 3是数字定位法
sed '2,3d' xx.txt # 第二行到第三行
2. 正则定位法
指定正则定位
sed '/g/d' xx.txt
sed '/^g/d' xx.txt
3. 数字和正则定位法
sed '3,/^g/d' xx.txt
# 第三行到以g开头的行都删除
4. 正则正则定位法
sed '/^g/,/^j/d' xx.txt
4. "sed的编辑模式:"
单引号
sed '3d' xx.txt # 删除第三行
sed -e '3d' -e '6d' xx.txt 删除3,6行 # 运行多项编辑
d 删除
p 打印
# sed -n '5p' xx.txt
a 在某一行后添加一行或多行
sed '2axxx' xx.txt # 在第二行之后添加xxx
c 用新的文本修改(替换)当前行
sed '2cxxx' xx.txt
i 在当前行之前插入文本
# 此功能是单独使用时
sed '2ixxx' xx.txt
r 在文件中读内容
r.txt -- /123/d
sed '2r r.txt' xx.txt
w 将指定行写入文件
sed '2w w.txt' xx.txt
y 将"字符"转换成另一个"字符"
sed '2y/f/F' xx.txt
# 替换字符,不是替换整体
s 将字符串转换成另一个字符串
# 每行只替换一次
vim xx.txt 123456710111212s1233443
sed 's/11/22' xx.txt
g 全部执行,应用于整行里面的所有内容
# 是执行,没有单独的替换功能
sed 's/11/22/g' xx.txt
i 忽略大小写
# 与s模式一起使用
sed 's/f/abc/gi' xx.txt
& 代表前面匹配到的内容
3. 案例
1. 将nginx.conf 中的注释行全部去掉
sed '/ *^#/d' /etc/nginx/nginx.conf
2. 将nginx.conf 中每一行之前增加注释
sed 's/.*/#&/g' /etc/nginx/nginx.conf
3. 要求一键修改本机的ip
192.168.15.100 -- 192.168.15.101
172.16.2.100 -- 172.16.2.101
sed -i 's#.100#.101#g' /etc/sysconfig/network-scripts/ifcfg-eth[01]
4. 将/etc/passwd中的root修改成ROOT
sed -i 's/root/ROOT/g' /etc/passwd