uniq
统计所有重复的次数,并打印出来
wc –l :以行来统计
-c :以列来统计
-m :精准统计这文件总共有多少字符,把空格也算上
ls -S :以时间来排序
-r :以大小来排序
cut
特点:能自定义分隔符
-c --字符
-d --分隔符
-f --列
--output-delimiter --输出分隔符 (可以自定义)
# echo12345 |cut -c2
2
# echo12345 |cut -c1,4
14
# echo12345 |cut -c2-4
234
#ifconfig eth0 |grep Mask |cut -d " " -f12 |cut -d ":" -f2
# head -1/etc/passwd | cut -d ":" -f 1,3,4 --output-delimiter="#"
sort
特点:能定向原文件(覆盖)
-u --去除重复行
-r --降序排列,默认是升序
-o --定向
原有的文件(覆盖)例:sort 1.txt -o 1.txt
-n --在通常情况下shell排序会义为10比2小的情况, 告诉sort,“要以数值来排序”!
-t和-k --当一行数据有多列的情况,想让非第1列的数值来排序,用法 sort -n -k 2 -t : facebook.txt
例: cat /etc/passwd |sort -n -t: -k 3
grep
参数:
-i ignore case 忽略大小写
-v invert match 不匹配的内容,取反的意思
-l file-with-match 输出匹配的文件名
-L file-without-match 输出不匹配的文件名
-c count 输出匹配的数目(行数) 统计次数
-n number 输出匹配行的同时在前面加上文件名及在文件名中的行数
-h no-filename 抑制文件名的输出
-E 匹配多个关键字
-o 将匹配的结果全部显示出来,一般用于统计匹配多少次 显示所有匹配的内容,其他不显示
-A 匹配结果往下显示N行
-B 匹配结果往前显示N行
-C 匹配结果前后显示N行
正则表达式规则:
. 代表一个任意字符
.. 两个字符
* 代表零个或者多个前字符
.* 0个或多个
..* 代表非空的任意字符
+ 代表一个或者多个前字符
^ 开头
$ 结束
[] 匹配单个字符
[abc] 包含a或b或c的都匹配,匹配单个字符
[^abc] 只要出现了abc这三个字母以外的字符就都匹配,排除
^[abc] 以a开头或以b开头或以c开头
^[^abc] 不以a开头或不以b开头或不以c开头
a+ 匹配至少一个或多个a
a* 匹配0或多个a
大写[[:upper:]] 或 [A-Z]
小写[[:lower:]] 或 [a-z]
字母[[:alpha:]] 或 [a-Z]
字母数字[[:alnum:]]
空格或者制表符 [[:blank:]]
纯数字[[:digit:]] 或 [0-9]
标点符号[[:punct:]]
例:grep.*:.*:4:.*:.*:.*:.* /etc/passwd
sed
-n 只打印处理过的信息 ,不加默认是打印所有
-e 多次动作
-f 跟awk一样的功能,只有加上这个参数才能运行脚本
-r 加入表示运用正则表达式
-i *********** 修改文件内容 ,如果不添加 原文件内容不会有改动
----------------------------------------------------------------
i 指定行前面插入内容 如果不指定行,默认是全部都添加
a 指定行后面插入内容,不过不指定行,默认是全部都添加
c 取代一整行
d 删除
p 打印
s 取代,可以直接进行替换的工作。通常这个 s 的动作可以搭配正则表达式。例如sed –n s/old/new/
特殊:
sed -ip ‘s// /d’ 会把所有空格的内容都删除,包括里面原有的内容
sed -ip ‘s/ / /g’ 只会删除有空格的内容 但空格理由内容的会保留
awk
1.
-F 指定分隔符
-f 指定脚本文件
-v 定义变量(如果不加就必须把变量写在print 后面)
$0 输出整行
2.模式匹配:
// 纯字符匹配
!// 纯字符不匹配
~// 字段值匹配
!~// 字段值不匹配
~/a1|a2|a3|a7|a9|/ 字段匹配a1或a2或a3...
3.操作模块:
BEGIN{执行一次} {执行多次}#这可以多个{} END{执行一次}
例:
cat 1.txt |awk –F”:”’BEGIN{sum=0}$2<=10 && $2>1 {print $1} $2<=20 $2>11 {print $1}’
4.内置变量
$1~$n 当前记录的第n个字段,字段间由FS分隔
FS 输入字段分隔符,默认是空格或tab
例: -F是写在awk 后面 ,FS是写在BEGIN 后面
awk 'BEGIN{FS=":"} NR==1 {print$0}' /etc/passwd
NF 当前记录中的字段个数,就是有多少列,一般取最后一列字段
NR 已经读出的记录数,就是行号,从1开始
RS 输入的记录分隔符,默认为换行符
OFS 输出字段分隔符,默是空格
ORS 输出的记录分隔符,默认为换行符
5、awk关系操作符
== 等于
!= 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
6、awk逻辑操作符
&& 逻辑与 类似shell里的[ 条件1 -a 条件2 ]
|| 逻辑或 类似shell里的[ 条件1 -o 条件2 ]
! 非
7.读取脚本的方法 :
awk –f awk.awk 1.txt
8.长度函数:
Length()
awk –F”:” ‘{print $1”长度为”length($1)}’ /etc/passwd
substr() 截取函数
用法:把$0第一个字符开始 截取1个
ll /etc |awk ‘substr($0,1,1)==”d” {print $NF}’