38.sed:文件流编辑器 难度:****
不用打开文件,直接通过sed命令就可以修改文件;
查找、替换、添加、删除,支持正则表达式。
流编辑,按行处理数据,每一行就是一条数据。
命令格式:sed [选项] ‘指令’ 文件
常用选项:
“-i”:对文件本身进行操作,不加则不会修改文件。
“-i.bak”:修改前对原文件进行备份。
“-n”:输出时只显示sed命令执行之后的结果。
eg:
# sed 指令
# s 替换指令
# p 打印结果
# a 下一行添加
# i 上一行添加
# d 删除查找到的行
# sed 替换标记
# g 全局
## 替换文本内容
sed ‘s/old/new/g’ filename
# 修改原文件
sed -i ‘s/old/new/g’ filename
# 修改并备份
sed -i.bak ‘s/old/new/g’ filename
# 查找内容
sed ‘/cn/p/ filename
# 输出某行,或某几行
sed -n ‘1,2 /root/ p’ /etc/passwd
sed -n ‘4 p’
# 添加
# 第一行下方添加一行新的内容
sed ‘1 a hello’ filename
# 第三行上方添加一行新的内容
sed ‘3 a hello’ filename
# 删除
# 删除找到的行
sed ‘/@/ d’ test.txt
#删除1,2行
sed ‘1,2 d’ test.txt
39.awk:一个伪装成命令的脚本语言 难度:*****
擅长对列操作,适合处理结构化的文件。
命令格式:awk [选项] ‘指令’ 文件
·选项:
-F:指定分隔符,/etc/passwd中的分隔符是“:”,csv文件分隔符是“,”,默认是空格或“\t”。
eg:
# $0 表示一整行
# $1 第一列
# $NF 最后一列
NR 是行号
print 打印输出
# 进行条件查询
cat test.txt
id,name,age,sex
1,张三,18,男
2,李四,19,女
3,王五,20,男
# 使用if()实现条件判断,输出满足条件的内容
awk -F"," '{if($4=="女") print $2}' test.txt
awk -F"," '{if($1==2) print $0}' test.txt
awk -F"," '{if($3>18 && NR >1) print $0}' test.txt