Linux学习(二十二)Shell基础特殊符号sortwcuniqteetrsplit

Posted 阮文武的网络日志

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux学习(二十二)Shell基础特殊符号sortwcuniqteetrsplit相关的知识,希望对你有一定的参考价值。

一、特殊符号

* :任意个任意字符

[root@ruanwenwu02 ~]# ls 1*
1bak.zip  1.tar  1.zip.bz2

1:
1.txt  2
[root@ruanwenwu02 ~]# ls 1*2

?:一个任意字符

[root@ruanwenwu02 ~]# ls 2?tar
2.tar

#:注释

[root@ruanwenwu02 ~]# #ls
[root@ruanwenwu02 ~]# 

\\:脱意

[root@ruanwenwu02 ~]# a=3
[root@ruanwenwu02 ~]# echo $a
3
[root@ruanwenwu02 ~]# echo \\$a
$a
[root@ruanwenwu02 ~]# echo "\\$a"
$a

|:管道符号

管道符号的作用,是把上一条命令的输出作为下一条命令的标准输入:

[root@ruanwenwu02 ~]# ls|wc -l
21

二、sort

sort命令是用来排序的。

默认按照首字母的ascii码排序:

[root@ruanwenwu02 ~]# ls|sort
1
1bak.zip
1.tar
1.zip.bz2
2
2.tar
3
33.tar
3.tar.gz
3.zip
4.tar
4.tar.bip2
4.zip
5
5.zip
6
7.txt
8.txt
999.txt
9.txt
[root@ruanwenwu02 ~]# cat 3.txt | sort

[
$
$
%^
3
33
55
6
6
666
dfd
dfdf
e
gr
kQ$
Q$
Q$
t

按数字排序:

[root@ruanwenwu02 ~]# sort -n 3.txt

[
$
$
%^
dfd
dfdf
e
gr
kQ$
Q$
Q$
t
3
6
6
33
55
666

实验发现当按数字排序的时候,字母和特殊字符都被当成0了。

倒序:

[root@ruanwenwu02 ~]# sort -r 3.txt
t
Q$
Q$
kQ$
gr
e
dfdf
dfd
666
6
6
55
33
3
%^
$
$
[

分段排序:

[root@ruanwenwu02 ~]# sort -t: -nrk3 666.txt
ruanwenwu:x:1000:1000::/home/ruanwenwu:/bin/bash
systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin

三、cut

cut命令是用来切割的。-d指定分隔符,-f指定段数,-c指定几个字符

[root@ruanwenwu02 ~]# cut -d : -f 3,4 666.txt
0:0
1:1
2:2
3:4
4:7
5:0
6:0
7:0
8:12
11:0
12:100
14:50
99:99
999:997
192:192
81:81
59:996
59:59
89:89
74:74
1000:1000
[root@ruanwenwu02 ~]# cut -d : -f 3,4 -c1 666.txt
cut: 只能指定列表中的一种类型
Try \'cut --help\' for more information.

实验说明,不能既分段切割,又截取字符。

截取字符:

[root@ruanwenwu02 ~]# cut -c 2-4 666.txt
oot
in:
aem
dm:
p:x
ync

四、wc

wc命令用来统计行数(最常用),单词数和字数。

wc -l统计行数。

wc -w统计单词数。

wc -m或者wc -c统计字母数。这两个命令会把隐藏的字母算在内。

[root@ruanwenwu02 ~]# vim 777.txt
[root@ruanwenwu02 ~]# wc -c 777.txt 
19 777.txt
[root@ruanwenwu02 ~]# cat 777.txt 
df dd
cc
dd dd dd

[root@ruanwenwu02 ~]# cat -A 777.txt 
df dd$
cc$
dd dd dd$
$
[root@ruanwenwu02 ~]# wc -m 777.txt 
19 777.txt
[root@ruanwenwu02 ~]# wc -w 777.txt 
6 777.txt

五、uniq

uniq命令经常和sort命令一起用。因为如果两个相同的行不在一起,就无法uniq。

[root@ruanwenwu02 ~]# uniq 1.txt
3
4
3
5
6
7
87
8

我们先sort再uniq看看呢:

[root@ruanwenwu02 ~]# sort 1.txt|uniq
3
4
5
6
7
8
87

uniq -c显示每行重复的次数:

[root@ruanwenwu02 ~]# sort 1.txt|uniq -c
      2 3
      1 4
      1 5
      1 6
      1 7
      1 8
      1 87

六、tee

tee命令的作用是接受标准输入,并重定向,将标准输入打印出来。

[root@ruanwenwu02 ~]# cat 1.txt|tee 3.txt
dffdf
[root@ruanwenwu02 ~]# cat 1.txt|tee -a 3.txt
dffdf
[root@ruanwenwu02 ~]# cat 1.txt|tee -a 3.txt
dffdf
[root@ruanwenwu02 ~]# cat 1.txt|tee -a 3.txt
dffdf
[root@ruanwenwu02 ~]# cat 3.txt
dffdf
dffdf
dffdf
dffdf

七、tr

tr命令的作用是将标准输入替换。

[root@ruanwenwu02 ~]# tr \'a-z\' \'A-Z\' \'sdfsdfsgdgfs\'
tr: 额外的操作数 "sdfsdfsgdgfs"
Try \'tr --help\' for more information.
[root@ruanwenwu02 ~]# tr \'a-z\' \'A-Z\'
dfdfdfdfdfdfd
DFDFDFDFDFDFD

八、split

split是切割文件。split可以按行切(split -l),也可以按大小切(split -b)。

首先我们来准备一个大文件。将系统中所有的conf文件合并到a.txt。

[root@ruanwenwu02 ~]# find / -type f -name "*.conf" -exec cat {} >> a.txt \\;

 按行切:

[root@ruanwenwu02 ~]# du -sh a.txt
544K    a.txt
[root@ruanwenwu02 ~]# wc -l a.txt 
21746 a.txt
[root@ruanwenwu02 ~]# mkdir /tmp/test2
[root@ruanwenwu02 ~]# mv a.txt /tmp/test2/
[root@ruanwenwu02 ~]# cd !$
cd /tmp/test2/
[root@ruanwenwu02 test2]# ls
a.txt
[root@ruanwenwu02 test2]# ls -l
总用量 544
-rw-r--r--. 1 root root 554540 11月 18 12:37 a.txt
[root@ruanwenwu02 test2]# wc -l a.txt 
21746 a.txt
[root@ruanwenwu02 test2]# wc -l 10000 a.txt 
wc: 10000: 没有那个文件或目录
 21746 a.txt
 21746 总用量
[root@ruanwenwu02 test2]# ls
a.txt
[root@ruanwenwu02 test2]# split -l 10000 a.txt
[root@ruanwenwu02 test2]# ls
a.txt  xaa  xab  xac

 

按大小切:

[root@ruanwenwu02 test2]# !find
find / -type f -name "*.conf" -exec cat {} >> a.txt \\;
[root@ruanwenwu02 test2]# ls
a.txt
[root@ruanwenwu02 test2]# split -b 100k a.txt
[root@ruanwenwu02 test2]# ls
a.txt  xaa  xab  xac  xad  xae  xaf

 指定分割文件前缀:

[root@ruanwenwu02 test2]# split -b 100k a.txt abc.
[root@ruanwenwu02 test2]# ls
abc.aa  abc.ab  abc.ac  abc.ad  abc.ae  abc.af  a.txt

 九、特殊符号

注意:||是如果前面的命令执行了,后面的就不执行了。

[root@ruanwenwu02 test2]# [ -d ruanwenwu ] || mkdir ruanwenwu
[root@ruanwenwu02 test2]# ls
abc.aa  abc.ab  abc.ac  abc.ad  abc.ae  abc.af  a.txt  ruanwenwu

 

以上是关于Linux学习(二十二)Shell基础特殊符号sortwcuniqteetrsplit的主要内容,如果未能解决你的问题,请参考以下文章

Linux学习笔记(二十五)shell特殊符号 sort_wc_uniqtee_tr_split

学习二十三

《Linux命令行与shell脚本编程大全》第二十二章 gawk进阶

学习二十二

第二十二课 Shell的基础知识

shell基础二十篇