shell文件处理工具
vim /etc/resolve.conf 查看dns6.shell脚本命令
1.diff
diff file file 比较两个文件的不同
-c 显示周围的行
-u 按照一格式统一输出生成补丁
-r 比较两个目录中文件的不同
pattch file file.path 打补丁
-b 备份原文件
2.grep
grep 关键字符 文件|目录 在文件或目录中查找含有关键字的行
grep -i 忽略大小写
-n 显示关键字所在行
-c 显示过滤结果的行数
-v 反向过滤
-E “关键字1|关键字2” 过滤多个关键字
-r 目录 在目录中查找含有关键字的文件
注意:^关键字 以关键字开头
关键字$ 以关键字结尾
^root 以root开头
root$ 以root结尾
3.cut
cut 截取字符
cut -d分隔符指定分隔符
cut -f1,7 显示指定的列
cut -c 显示指定字符
cut -d " " -f 10 截取空格后第十列到下一个分隔符空格之间的内容
4.sort 排序
sort
-n纯数字排序
-u去掉重复的
|uniq -c去掉重复并统计重复个数
-t指定分隔符
-k指定列
sort -t : -k 2 file -nu
5.uniq
sort file | uniq -c 去掉多余并统计重复次数
-d 显示多余行
-u 显示唯一的行
6.tr
tr 'a-z' 'A-Z' file
sed 's/原字符/替换字符/g' file
sed -e '策略1 ' -e '策略2 'file多个策略用-e
sed -i file 把转入后的文件输出到指定文件
sed '3,5s/原字符/替换字符/' file
sed xd 屏蔽指定行
sed xp 复制指定行
sed -n xp 只显示指定行
脚本
#!/bin/bash
MAX=$( wc- l $1 | cut -d " " -f 1)
for NUM in $( seq $MAX )
do
USERNAME=$(sed -n ${NUM}p$1)
PASSWD=$(sed in ${NUM}p $2)
useradd $USERNAME
echo $PASSWD | passwd --stdin$USERNAMR
done
7.awk 数据处理工具,将一行分成数个段进行处理,以字段为最小的处理单位
awk '条件类型1{动作1} 条件类型2{动作2}...' filename
# last -n 5
kiosk pts/0 :0 Wed Nov9 19:46still logged in
kiosk pts/0 :0 Wed Nov9 18:57 - 19:46(00:48)
kiosk :0 :0 Wed Nov9 18:57still logged in
reboot system boot3.10.0-327.el7.x Thu Nov 10 02:56 -19:59(-6:-57)
kiosk :0 :0 Wed Nov9 17:55 - 17:55(00:00)
wtmp begins Wed Sep 28 00:38:05 2016
# last -n 5 | awk '{print $1 "\t" $3}'
kiosk :0
kiosk :0
kiosk :0
rebootboot
kiosk :0
$0 代表一整行的数据
内置变量
NF 每一行($0)拥有的字段总数
NR 目前awk处理的是第几行的数据
FS 目前的分隔字符,默认是空格键
# last -n 5 | awk '{print $1 "lines:" NR "\tcolumes: "NF}'
kiosklines:1 columes: 10
kiosklines:2 columes: 10
kiosklines:3 columes: 10
rebootlines:4 columes: 11
kiosklines:5 columes: 10
lines:6columes: 0
wtmplines:7columes: 7
条件类型
# cat /etc/passwd | awk '{FS=":"} $3
页:
[1]