知识点 shell基础知识
cut,sort,wc,uniq,tee,tr,split
cut分割
选项
- -d 指定字段的分隔符,默认的字段分隔符为“TAB”
- -f 指定段号
- -c 指定第几个字符
[root@localhost test]#cat passwd.txt | head -5 |cut -d: -f1-6 //用的比较多
root:x:0:0:root:/root
bin:x:1:1:bin:/bin
daemon:x:2:2:daemon:/sbin
adm:x:3:4:adm:/var/adm
lp:x:4:7:lp:/var/spool/lpd
[root@localhost test]#cat passwd.txt | head -5 |cut -c 4
t
:
m
:
x
sort排序
选项
- n 按数字排序
- r 反序
- t 分隔符
- k 第几段
[root@localhost test]#sort -n passwd.txt //正序排列
adm:x:3:4:adm:/var/adm:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@localhost test]#sort -r passwd.txt //反序排列
www:x:1000:1000::/home/www:/bin/bash
www:x:1000:1000::/home/www:/bin/bash
www:x:1000:1000::/home/www:/bin/bash
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
wc
选项
- l 统计行数
- m 统计字符数
- w 统计词
- L 和m差不多,不过不计算最后的换行符$
[root@localhost test]#wc -l < passwd.txt
93
[root@localhost test]#wc -m < passwd.txt
2941
[root@localhost test]#wc -w < passwd.txt
134
[root@localhost test]#wc -L < passwd.txt
68
uniq去重
去重命令,不过不是很智能,需要配合sort一起使用
[root@localhost test]#cat tt.txt
aaa
bbb
ccc
ddd
abc
aaa
adc
ddd
bbb
bac
[root@localhost test]#uniq tt.txt
aaa
bbb
ccc
ddd
abc
aaa
adc
ddd
bbb
bac
[root@localhost test]#sort tt.txt | uniq
aaa
abc
adc
bac
bbb
ccc
ddd
[root@localhost test]#sort tt.txt | uniq -c //统计相同的行有多少行
1
2 aaa
1 abc
1 adc
1 bac
2 bbb
1 ccc
2 ddd
[root@localhost test]#chattr +i tt.txt
[root@localhost test]#lsattr tt.txt //不会更改源文件属性!
----i----------- tt.txt
[root@localhost test]#sort tt.txt | uniq -c
1
2 aaa
1 abc
1 adc
1 bac
2 bbb
1 ccc
2 ddd
tee重定向并显示
>的同时并显示到屏幕上,将前面的结果通过 ‘| tee ’输出给后面的文件并且输出在屏幕上。
[root@localhost test]#more middle.txt | tee more.txt
cat: hello: 没有那个文件或目录
cat: hello: 没有那个文件或目录
[root@localhost test]#ls
11.txt hello.txt more.txt semanage.conf tt.txt wwww.txt
copy.txt middle.txt passwd.txt test.zip www xxoo
[root@localhost test]#cat more.txt
cat: hello: 没有那个文件或目录
cat: hello: 没有那个文件或目录
tr替换字符
- d 表示删除某个字符,后面跟要删除的字符
- s 表示删除重复的字符
[root@localhost test]#cat more.txt
cat: hello: 没有那个文件或目录
cat: hello: 没有那个文件或目录
[root@localhost test]#cat more.txt | tr 'cat' 'dog'
dog: hello: 没有那个文件或目录
dog: hello: 没有那个文件或目录
[root@localhost test]#cat more.txt | tr '[a-z]' '[A-Z]'
CAT: HELLO: 没有那个文件或目录
CAT: HELLO: 没有那个文件或目录
[root@localhost test]#cat more.txt | tr -d ca
t: hello: 没有那个文件或目录
t: hello: 没有那个文件或目录
split切割
选项
- b 按照大小来分割,默认单位是byte
- l 按照行数来分割
[root@localhost test]#ll xxoo
-rw-r--r--. 1 root root 2321 10月 31 16:49 xxoo
[root@localhost test]#split -b 1000 xxoo
[root@localhost test]#ll
-rw-r--r--. 1 root root 1000 11月 11 17:01 xaa
-rw-r--r--. 1 root root 1000 11月 11 17:01 xab
-rw-r--r--. 1 root root 321 11月 11 17:01 xac
-rw-r--r--. 1 root root 2321 10月 31 16:49 xxoo
[root@localhost test]#du -sh xaa
4.0K xaa
[root@localhost test]#du -sh xab
4.0K xab
[root@localhost test]#du -sh xac
4.0K xac
[root@localhost test]#split -l 20 xxoo
-rw-r--r--. 1 root root 926 11月 11 17:04 xaa //把老的切割文件给覆盖了!
-rw-r--r--. 1 root root 949 11月 11 17:04 xab
-rw-r--r--. 1 root root 446 11月 11 17:04 xac
-rw-r--r--. 1 root root 2321 10月 31 16:49 xxoo
[root@localhost test]#vi xaa
1 Authors: Jason Tang <jtang@tresys.com>
2 #
3 # Copyright (C) 2004-2005 Tresys Technology, LLC
4 #
5 # This library is free software; you can redistribute it and/or
6 # modify it under the terms of the GNU Lesser General Public
7 # License as published by the Free Software Foundation; either
8 # version 2.1 of the License, or (at your option) any later version.
9 #
10 # This library is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 # Lesser General Public License for more details.
14 #
15 # You should have received a copy of the GNU Lesser General Public
16 # License along with this library; if not, write to the Free Software
17 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18 #
19 # Specify how libsemanage will interact with a SELinux policy manager.
20 # The four options are:
~
~
:set nu
[root@localhost test]#split -l 50 xxoo cat //文件名指定以cat开头,这样就不会覆盖了!
[root@localhost test]#ll
-rw-r--r--. 1 root root 2304 11月 11 17:09 cataa
-rw-r--r--. 1 root root 17 11月 11 17:09 catab
-rw-r--r--. 1 root root 926 11月 11 17:04 xaa
-rw-r--r--. 1 root root 949 11月 11 17:04 xab
-rw-r--r--. 1 root root 446 11月 11 17:04 xac
-rw-r--r--. 1 root root 2321 10月 31 16:49 xxoo
特殊符号
- $ 用作变量前面的标识符,
- ; 如果想在一行中间允许2个以上命令,可以使用该符号
- ~ 用户的home目录
- & 如果想把一条命令放到后台可以使用该符号
- [] 上面讲过的[]中的值任取一个。
- &&和|| 逻辑与和逻辑或
[root@localhost test]#mkdir /test/1/2 || ll
mkdir: 无法创建目录"/test/1/2": 没有那个文件或目录
-rw-r--r--. 1 root root 120 11月 11 10:28 11.txt
-rw-r--r--. 1 root root 2304 11月 11 17:09 cataa
-rw-r--r--. 1 root root 17 11月 11 17:09 catab
-rw-r--r--. 1 root root 926 11月 11 17:04 xaa
-rw-r--r--. 1 root root 949 11月 11 17:04 xab
-rw-r--r--. 1 root root 446 11月 11 17:04 xac
-rw-r--r--. 1 root root 2321 10月 31 16:49 xxoo
[root@localhost test]#mkdir /test/1/2 && ll
mkdir: 无法创建目录"/test/1/2": 没有那个文件或目录
[root@localhost test]#touch 12.txt
[root@localhost test]#touch 1.txt
[root@localhost test]#touch 2.txt
[root@localhost test]#ls [12].txt
1.txt 2.txt
[root@localhost test]#ls *.txt
11.txt 12.txt 1.txt 2.txt copy.txt hello.txt middle.txt more.txt passwd.txt tt.txt wwww.txt