管道符常营命令

cut:截取字符串,比如我们要以“:”作为分隔符,取第一列,
[root@localhost ~]# cat /etc/passwd |head -5|cut -d ":" -f1
root
bin
daemon
adm
lp

这里-d是指定分割符,-f后面接数字,是指截取范围,上面的例子是截取第一段,就输入-f1,如果想

截取两段,就用“,”分开,后面再接一个数字。如f1,2。

如果是1-3段,后面就接1-3.

指定第几个字符 -c

[root@localhost ~]# cat /etc/passwd |head -2|cut -c4
t

sort:排序,比如我们现在得到一列数字,或者是一列字符串,我们要由小到大做一个排序
[root@localhost ~]# sort /etc/passwd |head -1
adm:x:3:4:adm:/var/adm:/sbin/nologin
我们可以看到,sotr的排序是遵循英文字母的排序。这就是sort的作用。

sort -n会以数字大小去排序
[root@localhost ~]# sort -n 1.txt
<

{
}
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sync:x:5:0:sync:/sbin:/bin/sync
22223333
22222222222aaaaaaa
*我们需要注意的是,如果我们输入-n,那么文件里面的特殊符号和字符会被认为是0。所以特殊符号和字母会排在前面。

sotr-r反向排序,与-n正好相反
[root@localhost ~]# sort -r 1.txt
sync:x:5:0:sync:/sbin:/bin/sync
1111111111133333333333
}

wc -l 统计行数
[root@localhost ~]# cat 1.txt | wc -l
20

wc -m 统计字符数
[root@localhost ~]# cat 1.txt | wc -m
499

wc -w 统计词数,他是根据空格或者空白字符去分割的
[root@localhost ~]# cat 1.txt | wc -w
20

uniq去重复,他一般和sort在一起用,先排序,然后去重(最常用)
[root@localhost ~]# cat 2.txt
123
abc 1111,222
123
abc
1
1
2
然后我们排序,去重
[root@localhost ~]# sort 2.txt |uniq
1
123
2
abc
abc 1111,222

uniq -c统计重复次数
[root@localhost ~]# sort 2.txt |uniq -c
2 1
2 123
1 2
1 abc
1 abc 1111,222
tee:类似于>输出重定向。>输出重定向仅仅是将内容写入到目标文件,对我们看不到任何的内容,成功与否。这时候我们就使用tee取代">"。它不仅可以将内容重定向到目标文件,也可以将内容打印到屏幕上。
[root@localhost ~]# sort 2.txt |uniq -c|tee a.txt
2 1
2 123
1 2
1 abc
1 abc 1111,222
这样我们就可以看到输出的内容了

tee -a追加,和>> 作用类似。但是在追加的同时将内容打印在屏幕上
[root@localhost ~]# sort 2.txt |uniq -c|tee -a a.txt
2 1
2 123
1 2
1 abc
1 abc 1111,222
[root@localhost ~]# cat a.txt
2 1
2 123
1 2
1 abc
1 abc 1111,222
2 1
2 123
1 2
1 abc

tr:替换字符,它支持写多个字符
[root@localhost ~]# echo "aminglinux" |tr '[al]' '[AL]'
AmingLinux
[root@localhost ~]# echo "aminglinux" |tr 'a' 'A'
Aminglinux
全部替换成大写
[root@localhost ~]# echo "aminglinux" |tr '[a-z]' '[A-Z]'
AMINGLINUX

split:切割,将大文件切割成小文件。他有两种用法,一种是 -b大小默认单位是字节 ,一种是 -l行数。(系统默认是以x开头)
[root@localhost test]# split -b 1000 a.txt
[root@localhost test]# ls
a.txt xae xaj xao xat xay xbd xbi xbn xbs xbx xcc xch xcm xcr xcw xdb xdg xdl xdq xdv xea xef xek xep xeu xez xfe xfj
xaa xaf xak xap xau xaz xbe xbj xbo xbt xby xcd xci xcn xcs xcx xdc xdh xdm xdr xdw xeb xeg xel xeq xev xfa xff xfk
xab xag xal xaq xav xba xbf xbk xbp xbu xbz xce xcj xco xct xcy xdd xdi xdn xds xdx xec xeh xem xer xew xfb xfg xfl
xac xah xam xar xaw xbb xbg xbl xbq xbv xca xcf xck xcp xcu xcz xde xdj xdo xdt xdy xed xei xen xes xex xfc xfh xfm
xad xai xan xas xax xbc xbh xbm xbr xbw xcb xcg xcl xcq xcv xda xdf xdk xdp xdu xdz xee xej xeo xet xey xfd xfi
这就将a.txt按1000b切割完成了。

我们也可以切割完后给他命名,不用系统给我们的名字,但是我们只能自定义它的前缀。

s[root@localhost test]# split -b 100k a.txt abc

[root@localhost test]# ls
abcaa abcab a.txt xaa xab

split -l按行切割,比如我们都按照1000行切割
[root@localhost test]# split -l 1000 a.txt
[root@localhost test]# wc -l *
1000 xaa
1000 xab
1000 xac
这样每个文件都是1000行。

后面接目标文件,就可以直接清空里面的内容。
[root@localhost ~]# > a.txt
[root@localhost ~]# cat a.txt

注释符
#:在#号后面输入的shell都不回生效,它的作用是解释说明。

$:变量前缀,!$组合,这则里面表示行位

;多条命名写到一行,用分号分割
[root@localhost ~]# ls 1.txt; wc -l 2.txt
1.txt
7 2.txt

~:用户的家目录,在正则表达式里表示匹配符

&:命令放到后台去

:输出重定向,会把目标的内容全部替换

:追加重定向,会将内容追加到目标内容的结尾处
2>:错误输出重定向,和输出重定向作用一样
2>>:最佳错误重定向,和追加重定向作用一样。
&>:直接把正确和错误直接输入到目标文件中

【】:指定字符中的一个,经常用于替换,比如【0-9】,【a-zA-Z】,【abc】。

||:在shell代表或者,它用在两条命令中间。如果第一条命令执行成功,它就不会执行第二条命令,如果执行不成功,它就会执行第二条命令。
[root@localhost ~]# ls 1a.txt|| wc -l 2.txt
ls: 无法访问1a.txt: 没有那个文件或目录
7 2.txt
第一条命令没有成功,它就执行了第二条
[root@localhost ~]# ls 1.txt|| wc -l 2.txt
1.txt
第一条命令成功了,它就不执行第二条。

&&:让两个命令连续执行,只有前面命令执行成功,后面命令才继续执行。
[root@localhost ~]# ls 1.txt&& wc -l 2.txt
1.txt
7 2.txt
只有前一个命令执行成功,后一个才会执行
[root@localhost ~]# ls 1a.txt&& wc -l 2.txt
ls: 无法访问1a.txt: 没有那个文件或目录
如果前一个命令不成功,那么后一条命名就不会执行。

我们可以将||和&&理解成一个判断,||只有前面的命令不成功的时候才执行后面的命令,&&只有前面命令成功的时候才会执行后面的命令。