cut
在一行中取出部分数据,以行为单位
cut -d '分隔符 ' -f fields
$ pwd /home/users/chenzhaoqun
$ pwd | cut -d '/' -f 1
$ pwd | cut -d '/' -f 2
home
$ pwd | cut -d '/' -f 3
users
$ pwd | cut -d '/' -f 4
chenzhaoqun
$ pwd | cut -d '/' -f 3,4
users/chenzhaoqun
cut -c 字符范围
以字符为单位取出固定字符区间
$ export
declare -x ANT_HOME="/home/tools/tools/ant/apache-ant-1.6.5"
declare -x ANT_HOME_1_7="/home/tools/tools/ant/apache-ant-1.7.1" declare -x G_BROKEN_FILENAMES="1"
$ export | cut -c 12-
ANT_HOME="/home/tools/tools/ant/apache-ant-1.6.5" ANT_HOME_1_7="/home/tools/tools/ant/apache-ant-1.7.1" G_BROKEN_FILENAMES="1"
$ export | cut -c 12-15
ANT_
ANT_
G_BR
grep
分析一行,有我们需要的信息就将该行拿出来
grep [-acinv] [--color=auto] '查询字符串' filename
-a
将二进制文件以text方式查询
-c
计算找到字符串的次数
-i
忽略大小写
-n
输出行号
-v
反向选择,显示不包含‘查询字符串’的行
表2-1 grep使用的正则表达式元字符
元字符
功能
示例
匹配对象
^
行首定位符
‘^love’
匹配所有以love开头的行
$
行尾定位符
‘love$’
匹配所有以love结尾的行
.
匹配单个字符
‘l..e’
匹配包含一个l,后面跟两个字符,再跟一个e的行
*
匹配0或者多个重复的位于*前的字符
‘*love’
匹配包含跟在0个或者多个字符后的love的行
[]
匹配一组字符中的任意一个
‘[Ll]ove’
匹配Love或者love
[^]
匹配不在指定组内的字符
’[^A-Z]’
匹配不在范围A至Z之间的任意一个字符
<
词首定位符
’
匹配包含以love开头的词的行
<
词尾定位符
‘love/>’
匹配包含以love结尾的词的行
(..)
标记匹配到的字符
’(love)ing’
模式love被保存在1号寄存器中,之后可用\1引用它
x{m}或x{m,}或x{m,n}
字符x的重复次数:m次、至少m次、至少m次但不超过n次
‘o{5}’,’o{5,}’ ,’o{5,10}’
匹配连续出现5个o、至少5个o或者5~10个o的行
其他方法:
1、使用多个 -e 参数
如:netstat -an | grep -E "ESTABLISHED|WAIT"
注意:netstat -an | grep -e EST -e WAIT 并列使用多个 -e参数可以实现或条件
2、使用扩展
如:netstat -an | grep -E "ESTABLISHED|WAIT"
注意:此处的 -E 是大写 ,匹配条件一定要加 引号
sort
sort [-fbMnrtuk] [file or stdin]
-f
忽略大小写
-b
忽略行前的空格
-M
以月份的名字来排序,JAN > DEC
-n
使用“纯数字”排序
-r
反向排序
-u
uniq
-t
指定分隔符,默认是TAB
-k
以分割之后的哪个field来排序
uniq
uniq [-ic]
-i
忽略大小写
-c
进行计数
$ last | cut -d ' ' -f1 | sort | uniq -c | sort -r -n
345 root
171 duanzhib
126 zouxidon
68 zhouqian
68 chenzhao
37 wangjinl
35 jiangwei
last命令列出最近登录的用户列表
第一列为用户名
最后的结果是按登录次数逆序的排名
综合使用案例:
一个文件similog中有很多行:
debug:[一汽%20夏利n5,一汽%20夏利n5][1,2] simi 100, interval 16
想要把simi后面的分数取出来,并统计分布
cat similog | cut -d ']' -f 3 | cut -d ' ' -f 3 | tr -d ',' | sort -n | uniq -c
cat similog 不解释
cut -d ']' -f 3 取出 simi 100, interval 16
cut -d ' ' -f 3 取出100,
tr -d ',' 删除,
sort -n 排序
uniq -c 统计出现的次数
tee
tee [-a] file
-a 对file进行续写,append文件模式
tee是将stdout转存一份到文件,又不影响stdout的输出,后面还可以被其他命令处理
字符转换命令 tr col join paste expand
tr [-ds] SET1 [SET2]
参数
解释
-d
删除str
-s
替换掉重复的字符
-t
将SET1按SET2的长度截断
tr '[a-z]' '[A-Z]'
upper case
col [-xb]
参数
解释
-x
将tab转成空格
-b
将/,仅保留/最后接的字符
join [-ti12] file1 file2
将两个文件的按照第一列合并
参数
解释
-t
指定列分隔符,默认是空格
-i
忽略大小写
-1 n
对文件1按第n列比较
-2 n
对文件2按第n列比较
join -1 3 file1 -2 4 file2
这是file1的第3列和file2的第4列,就会合并,然后放到第1列,后面接剩余的数据
注意:对比时两文件要sort
paste [-d] file1 file2
将两个文件的每行合并成一行,中间被分隔符分割
参数
解释
-d
指定分隔符
把file写成- 表示来自std input的意思
expand [-t] file
将tab转成空格,-t指定转成空格的个数
split
split [-bl] file PREFIX
将一个大文件切割成指定大小或指定行的小文件
参数
解释
-b
按大小分割,可加单位,b, k, m
-l
按行数分割
PREFIX
分割后文件名的前缀
-a
suffix length,默认为2,且是aa,ab,ac…命名
-d
以数字作为后缀
文件合并
使用重定向
如将file1,file2,file3合并成file
cat file1 file2 file3 >> file
cat file* >> file
xargs
xargs [-0epn] command
为command生成参数,并且执行command
因为有些command不支持直接使用管道,可以从stdin读入,使用空格分割,然后作为command的参数执行
参数
解释
-0
还原stdin中的特殊字符,如 ` \ 空格等,为一般字符
-e
后面接一个字符串,xargs分析到该字符串时就停止,该字符串不会被使用
-p
每次执行command,都询问
-n
command使用n个参数,更多的都会忽略
- 减号
可以用-表示stdin或stdout,放在应该写file的地方