cut
cut就是“切”的意思,这个命令可以将一段信息的某一段“切”出来,处理的信息是以“行”为单位。
用法:
1. cut-d'分隔符' -f fields
echo $PATH > test
echo $PATH | cut -d':' -f 5 >> test
echo $PATH | cut -d':' -f3,5 >> test
more test
/sr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
/usr/bin
/usr/local/bin:/usr/bin
注意:如果用cut命令从文件中析取字段,而又没有指定分隔符,cut就用制表符作为默认字段分隔符。
2. cut -c字符范围
cut-cn1-n2 file(其中n1和n2是列号,n2可以省略,则缺是从n1截取到该列最后一个字符)
例如:
date |cut -c1-4
2012
date |cut -c31-
16:11:22CST
paste
在某种意义上,paste命令就是与cut相反。它不是把行分开,而是把多行合在一起。paste命令的一般格式:paste files
其中files制定的那些文件中的对应行形成一行,然后写入标准输出。在files中可以用破折号(-)表示从标准输入获得输入。
假如这里有两个文件,name和grade。
more name grade
::::::::::::::
name
::::::::::::::
Barbara
Alie
Susan
Tony
::::::::::::::
grade
::::::::::::::
99.0
76.0
89.0
100.0
从标准输入获得数据:
paste name - >tt
12
13
14
15
more tt
Barbara 12
Alie 13
Susan 14
Tony 15
将两个文件合并成一个文件:
paste name grade >>info
cat info
Barbara 99.0
Alie 76.0
Susan 89.0
Tony 100.0
文件中的每一行都与其他文件中相同行显示在一起,中间用制表符分隔,如果不想用制表符分隔可以用-d制定分隔符。
paste -d: name grade >info
cat info
Barbara:99.0
Alie:76.0
Susan:89.0
Tony:100.0
-s选项告诉paste把同一文件中的行粘贴在一起,而不是从其他文件。如果制定一个文件名,其效果就是把文件中的所有行合并成一行,原来各行之间用制表符或者用-d选项制定的分隔符分隔。
paste -s name
Barbara Alie Susan Tony
ls / | paste -d' ' -s
bin boot cdrom dev etc home host initrd.img initrd.img.old lib lost+foundmedia mnt opt proc root run sbin selinux srv sys tmp usr var vmlinuzvmlinuz.old
tr
tr可以用来删除一段信息当中的文字,或者是进行文字信息的替换。
grep
grep分析一行信息,若当中有我们所需要的信息就将该行取出来,简单的语法是这样的:
grep [-acinv] [--color=auto] '查找的字符串'filename
参数:
-a将binary文件以text文件的方式查找数据;
-c计算找到’查找字符串‘的次数;
-i查找的时候,忽略大小写
-n顺便输出行号;
-v反向选择,即显示出没有‘查找字符串’ 内容的那一行
以info文件为例:
more info | grep 99
Barbara:99.0
more info | grep -vcn 99
3
info| grep -vn 99
2:Alie:76.0
3:Susan:89.0
4:Tony:100.0
more info | grep -n '[A-Z]...[a-z]'
1:Barbara:99.0
3:Susan:89.0
grep是个很棒的命令,但是它的强大之处在于它能很好的处理正则表达式
sort
sort是个很有趣的命令,它可以帮我们进行排序,而且可以根据不同的数据类型来排序。例如数字和文字的排序就不一样。
用法:
sort [-fbMnrtuk] [file or stdin]
参数:
-f:忽略大小写
-b:忽略前面的空格部分
-M:以月份的名字来排序
-n:使用“纯数字”进行排序
-r:反向排序
-u:就是uniq,相同的数据中,仅出现一行代表
-t:分隔符,默认用[tab]键来分隔
-k: 以哪个区间(filed)来排序
还是以info文件为例,按成绩排序:
more info | cut -d: -f2,1 | sort
Alie:76.0
Barbara:99.0
Susan:89.0
Tony:100.0
more info | cut -d: -f2,1 | sort -r
Tony:100.0
Susan:89.0
Barbara:99.0
Alie:76.0
按名字进行排序:
sort -t':' -r -k1 info
Tony:100.0
Susan:89.0
Barbara:99.0
Alie:76.0
sort -t':' -r -k2 info
Barbara:99.0
Susan:89.0
Alie:76.0
Tony:100.0
(按理说应该是按成绩逆序排序的,但是结果不正确,只能说sort对域的处理没有cut好)
uniq
如果排完序以后,想要将重复的数据仅显示一列,该怎么做呢?
uniq [-ic]
-i:忽略大小写
-c:进行计数
wc
这个命令用于统计文件中有多少字,多少行,多少字节。
用法:
wc [-lwm]
-l:仅列出行
-w:仅列出字数
-m:多少字符
常用与统计一个目录中包含多少文件。
ls| wc -l