8.10 shell特殊符号cut命令
8.11 sort_wc_uniq命令
8.12 tee_tr_split命令
8.13 shell特殊符号下
8.10/8.13 shell中特殊符号
符号 | 意思 |
---|---|
* | 表示一个或多个任意字符 |
? | 表示任意一个字符 |
# | 注释符 |
\ | 转义符 |
| | 管道符 |
$ | 变量前缀,正则表示行尾 |
; | 用于多条命令写一行 |
~ | 用户家目录 正则表示匹配符 |
& | 放到命令后面,把命令放到后台运行 |
> | 输出重定向符 |
[] | 指定字符中的一个 |
|| | 逻辑或 |
&& | 逻辑与 |
*:表示一个或多个任意字符
1 | [root@localhost ~]# ls *.txt |
?:表示一个任意字符
1 | [root@localhost ~]# ls ?.txt |
#:表示注释 不执行
1 | [root@localhost ~]# # rm /root/ |
\: 将特殊字符变成一般字符
1 | [root@localhost ~]# b="$a\$" ##$a指定a的值 \$使$失去原意 |
|:把前一个命令的内容输入给后面的命令
1 | [root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 | grep 'IPADDR' ##在ifcfg-ens33中找出带IPADDR的行 |
$:变量前缀,正则表示行尾
1 | [root@localhost ~]# a1=1 |
1 | [root@localhost ~]# head -2 /etc/passwd |sed '1,$s/root/kun/g' ##$表示末行 |
;:用于多条命令写一行
1 | [root@localhost ~]# mkdir 1111;ls ##依次执行两个命令 |
&:放到命令后面,把命令放到后台运行
1 | [root@localhost ~]# sleep 200 & ##命令后面加&说明把任务放后台运行 |
>:把前一条命令的内容输出到文件里
1 | [root@localhost ~]# echo 'sadfsd'> a.txt ##把sadfsd输出到a里 a原来的内容会删除 |
>>:把前一条命令的内容追加到文件里
1 | [root@localhost ~]# echo 'sadfsd'>> a.txt ##把sadfsd追加到a里 a原来的内容不删除 |
2>:把前一条命令的错误内容输出到文件里
1 | [root@localhost ~]# eadf 2> a.txt |
2>>:把前一条命令的错误内容追加到文件里
1 | [root@localhost ~]# eadf 2>> a.txt |
&>:把前一条命令正确和错误内容输出到文件里
1 | [root@localhost ~]# ls [0-9].txt sd.txt &> a.txt |
&>>:把前一条命令正确和错误内容追加到文件里
1 | [root@localhost ~]# ls [0-9].txt sd.txt &>> a.txt |
1 | [root@localhost ~]# ls [0-9].txt sd.txt > a.txt 2> 2.txt ##把正确的内容输出到a.txt 错误的内容输出到2.txt |
[]{}:指定字符中的一个
1 | [root@localhost ~]# ls [0-9].txt ##表示0到9中的其中一个数字 |
1 | [root@localhost ~]# ls [0-9a-z].txt |
1 | [root@localhost ~]# ls {1,2,3}.txt ##表示1,2,3中的其中一个 |
||:前一个命令为假才执行后一个命令,反之
1 | [root@localhost ~]# ls as.txt || wc -l 学习计划.txt ##前一个命令是假才执行下一个命令 |
1 | [root@localhost ~]# ls 1.txt || wc -l 学习计划.txt ##前一个命令是真就不执行后一个命令 |
&&:前一个命令为真才执行后一个命令,反之
1 | [root@localhost ~]# ls 1.txt && wc -l 学习计划.txt ##前一个命令是真才执行下一个命令 |
1 | [root@localhost ~]# ls as.txt && wc -l 学习计划.txt ##前一个命令是假就不执行后一个命令 |
8.11/8.12 和管道符相关的命令
cut: 截取工具
-d
:指定字符作为分隔符-f
:指定段号1
2
3[root@localhost ~]# head -2 /etc/passwd | cut -d ":" -f 1-5
root:x:0:0:root
bin:x:1:1:bin
-c
:截取指定第几个字符1
2
3[root@localhost ~]# head -2 /etc/passwd | cut -c 3-6 ##指定第3个到第6个字符
ot:x
n:x:
sort:排序工具
1 | [root@localhost ~]# cat 1.txt | sort ##sort默认是以ascii码排序 |
-n
:以数字顺序来排序 特殊符号默认为01
2
3
4
5
6
7
8
9
10
11
12
13
14[root@localhost ~]# cat 1.txt | sort -n
;;
{
*&
+
adm:x:3:4:adm:/var/adm:/sbin/nologin
asdf
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
234
1212
1222
-r
:以数字顺序来反排序1
2
3
4
5
6
7
8
9
10
11
12
13
14[root@localhost ~]# cat 1.txt | sort -r
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
asdf
adm:x:3:4:adm:/var/adm:/sbin/nologin
234
1222
1212
+
*&
{
;;
wc:统计工具
-l
:统计行数-w
:统计词数-m
:统计字符数1
2
3
4
5
6
7
8[root@localhost ~]# wc 1.txt
13 13 212 1.txt
[root@localhost ~]# wc -l 1.txt
13 1.txt
[root@localhost ~]# wc -m 1.txt
212 1.txt
[root@localhost ~]# wc -w 1.txt
13 1.txt
uniq:按照顺序去重复
1 | [root@localhost ~]# uniq 2.txt ##111并没有去重 |
1 | [root@localhost ~]# sort -n 2.txt |uniq ##先sort来排序 在uniq来去重 |
-c
:统计重复的行数1
2
3
4
5
6
7[root@localhost ~]# sort -n 2.txt |uniq -c
1 =
1 -
2 kun
1 sdfsdf
2 111
1 12442
tee:重定向并在屏幕显示内容
1 | [root@localhost ~]# cat 2.txt |tee 1.txt ##把2.txt内容重定向到1.txt里 |
-a
:追加重定向1
2
3
4
5
6
7
8[root@localhost ~]# cat 2.txt |tee -a 1.txt ##-a表示追加内容到1.txt中
111
111
[root@localhost ~]# cat 1.txt
111
111
111
111
tr:替换字符
1 | [root@localhost ~]# echo 'kunassd' | tr 'a' 'A' |
split:切割文件工具
-b
:指定文件大小来切割文件(默认单位是字节)1
2
3
4
5
6
7[root@localhost test]# split -b 100k a.txt ##按100k来切割文件
[root@localhost test]# ll -h
总用量 480K
-rw-r--r--. 1 root root 237K 4月 25 03:45 a.txt
-rw-r--r--. 1 root root 100K 4月 25 03:49 xaa
-rw-r--r--. 1 root root 100K 4月 25 03:49 xab
-rw-r--r--. 1 root root 37K 4月 25 03:49 xac
-l
:指定文件的行来切割文件1
2
3
4
5
6
7
8
9
10
11[root@localhost test]# split -l 1000 a.txt ##按文件中每1000行来切割文件
[root@localhost test]# wc -l *
6047 a.txt
1000 xaa
1000 xab
1000 xac
1000 xad
1000 xae
1000 xaf
47 xag
12094 总用量