2:数据和提取
新的小插件 tldr tldr
简化了烦琐的man
的输出帮助信息,只列出关键的语法信息、例子,方便用户使用。
npm install -g tldr
vim 的语法 ^$: 行首 行尾
替换的命令 :%s
目录
cut 切分
grep 检索 [-acinv] <string> <file>
SORT 排序
uniq 去重
插入awk
split 文件切分
tr 替换、压缩和删除
grep 检索 [-acinv] <string> <file>
WC 统计
TEE 双向重导项
XARGS 参数代换
文本替换
文本替换
%s/\text/替换的内容 /[全局替换]/g
cut 切分
cut 是以每一行为一个处理对象的 这种机制和 sed 命令一样。 作用剪切数据
将每个文件中选定的行部分打印到标准输出。
长选项的强制参数对于短选项也是强制的。
-b、 --字节=列表
仅选择这些字节
-c、 --字符=列表
仅选择这些字符
-d、 --分隔符=DELIM
字段分隔符使用DELIM而不是TAB
-f、 --字段=列表
仅选择这些字段;还可以打印任何不包含分隔符的行,除非指定了-s选项
-带-b的n:不拆分多字节字符
--补足
补充所选字节、字符或字段集
-s、 --仅限分隔符
不打印不包含分隔符的行
--输出分隔符=字符串
使用字符串作为输出分隔符默认情况下使用输入分隔符
example
echo ${PATH}
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
echo ${PATH} | cut -d "/" -f 2
grep 检索 [-acinv] <string> <file>
grep搜索命名的输入文件,如果没有命名文件或者如果文件名中给出了一个连字符减号(-),则搜索标准输入以查找包含与给定模式匹配的行。通过默认情况下,grep打印匹配的行。
grep -n 按照顺序输出行号
grep -n main 1.c
grep -n "main" * --全部
grep -v 反向查找 (输出没有找到的) —not in
last | grep -v "xxx"
按照用户查看 cat /etc/passwd 用户 并且读到sync 用户结束
cat /etc/passwd | cut -d : -f 1 | xargs -n 1 -enync id
SORT 排序
sort [-fbMnrtuk] <file_or_stdio>
-f:忽略⼤小写
-b:忽略最前面的空格符
-M:以月份名称排序
-n:以纯数字⽅式排序
-r: 反向排序
cat /etc/passwd | sort -t : -k 3 -n -r
-u:uniq
-t:分割符,默认[TAB]
-k: 以那个区间排序
cat /etc/passwd | sort -t : -k 3 -n
cat /etc/passwd | sort -t: -k 3 -n -- 按数字排序 -第三列 -t 按分隔符分割
WC 统计
WC 统计字符,字数,行数
Øwc [-lwm] <file_or_stdin>
Ø-l:仅列出⾏号
Ø-w:仅列出多少字
Ø-m:仅列出多少字符
last | grep -v "root" |grep -v "^$" |cut -d " " -f 1|sort -u
统计去重后的总数
last | grep -v "root" |grep -v "^$" |cut -d " " -f 1|uniq -c
统计登录的总数
last | grep -v "^$" |grep -v "wtmp" |grep "boot" |wc -l
主机中本地登录的用户名,按照次数排序,并且输出次数
last | grep -v "^$" |grep -v "wtmp" |grep "boot" |awk '{print $1}' | wc -c
last | grep -v "^$" |grep -v "wtmp" |grep "boot" |awk '{print $1}' | uniq -c
last | grep -v "^$" |grep -v "wtmp" |grep "boot" |awk '{print $1}' | uniq -c |sort -n -r
我只有单个用户没有效果
取区间 的10个用户 通过cut 剪切出-d : -f
cat /etc/passwd |head -n 20 |tail -n 1
单独的用户 cut -d 为分割付 ,-f为 第一列头
cat /etc/passwd |head -n 20 |tail -n 10| cut -d : -f 1
参数替换了
uniq 去重
uniq [-ic]
-i:忽略⼤小写字符的不同
-c:进⾏计数
last | grep -v "root" |grep -v "^$" |cut -d " " -f 1|uniq -c
插入awk
last | grep -v "root" |grep -v "^$" |cut -d " " -f 1|uniq -c |sort -n -r | awk '{printf("%s %d\n",$2 ,$1)}'
嵌入含C 语言的函数
awk '{printf("%s %d\n",$2 ,$1)}'
TEE 双向重导项
重定向到1.log 1.log 则显示1.c 的显示的所有数据
cat 1.c | tee 1.log
split 文件切分
-l num:以num⾏为⼤小切分 ||拆分文件,每个拆分有10行
split -l 10 filename
example >ls /etc/ |split -l 10 rm x??
在每个拆分中拆分512字节的文件
split -b 512 filename
shell
XARGS 参数代换
xargs [-0pne] <command>
-0:将特殊字符还原为普通字符
-eEOF:当xargs读到EOF时停⽌
-p:执⾏指令前询问
-n num:每次执⾏command时需要的参数个数
echo "root" | xargs -n 1 -ezrx [-p] 为询问
.参数替换 10 个到20 个id 展现了
cat /etc/passwd |head -n 20 |tail -n 10| cut -d : -f 1 | xargs -n 1 id
tr 替换、压缩和删除
tldr tr
tr -s 压缩
tr -c
替换 —将第一个集合的每个字符映射到第二个集合的相应字符 1 对应替换
example—> tr 'abcd' 'jkmn' < filename
tr 'inclue' 'aaaa' < 1.log
tr -d 'input_characters' < filename
从输入中删除指定字符集的所有匹配项
tr -d 'inclue' < 1.log
将一系列相同的字符压缩为单个字符:
tr -s 'input_characters' < filename
cat 1.c |tr -d 'include' | tr -s ' '
小写换成大写 -大写换小写
tr "[:lower:]" "[:upper:]" < 1.log
本地的etc 目录下的文件及目录,每十条保存到一个文件中
tail -1 参数为行数
— 显示文件中最后的“count”行
rev 字符串颠倒
思考题目:
"1 2 3 4 5 6 7 9 a v 你好 ./8"
bash 计算 $[ ]
echo "1 2 3 4 5 6 7 9 a v 你好 ./8" |tr -s -c "0-9" " "
echo "1 2 3 4 5 6 7 9 a v 你好 ./8" |tr -s -c "0-9" " "| echo $[`tr " " "+"` 0]
常用符号:cat>> 正向读 <<作为输入提供
a.txt | tr "" "\n" | sort | uniq -c | sort -n -r
AWK文本数据处理 <要点
可以传C语言 传入参数
cat /etc/passwd | awk -F: -v SUM=${SUM} -v cnt=${cnt} 'BEGIN {printf("Hi \n")}'
cat /etc/passwd | awk -F: -v SUM=${SUM} -v cnt=${cnt} 'BEGIN {printf("Hi \n")} {if($3<100){printf("cnt=%d,name=%s,id=%d",++cnt,$1,$3);sum+=$3; printf("sum=%d\n",sum)}} '
传出参数eval
测试
cat /etc/passwd | awk -F: -v SUM=${SUM} -v cnt=${cnt} '{if($3<100){++cnt; sum+=$3;}} END {printf("sum=%d \n avg=%d\n",sum,sum/cnt)}'
将参数传出
END的计算完成后的参数都可以传出
eval ` cat /etc/passwd | awk -F: -v SUM=${SUM} -v cnt=${cnt} '{if($3<100){++cnt; sum+=$3;}}
END {printf("sum=%d \n avg=%d\n",sum,sum/cnt)}'`