com 字符串 学习 linu sci 在屏幕上 ges 特殊 shadow
一,shell 中的特殊符号
你在学习 linux 的过程中,也许你已经接触过某个特殊符号,例如 "*",它是一个通配符号,代表零个或多个字符或数字.
常用到的特殊字符:
1,* 代表零个或多个任意字符.
2,? 只代表一个任意的字符,不管是数字还是字母,只要是一个都能匹配出来.
3,# 这个符号在 linux 中表示注释说明的意思,即 #后面的内容 linux 忽略掉.
4,\ 脱意字符,将后面的特殊符号(例如 "*" )还原为普通字符.
5,| 管道符,前面多次出现过,它的作用在于将符号前面命令的结果丢给符号后面的命令.这里提到的后面的命令,并不是所有的命令都可以的,一般针对文档操作的命令比较常用,例如 cat, less, head, tail, grep, cut, sort, wc, uniq, tee, tr, split, sed, awk 等等,其中 grep, sed, awk 为正则表达式必须掌握的工具.
wc -l 命令用来计算一个文档有多少行.
cut 命令
用来截取某一个字段.
语法:
cut -d '分隔字符' [-cf] //n这里的n是数字
-d :后面跟分隔字符,分隔字符要用单引号括起来
-c :后面接的是第几个字符
-f :后面接的是第几个区块
sort 命令
sort 命令是在 Linux 里非常有用,它将文件进行排序,并将排序结果标准输出.sort 命令既可以从特定的文件,也可以从 stdin 中获取输入.
语法:
sort [-t 分隔符] [-kn1,n2] [-nru] //这里的n1 < n2
-t 分隔符 :作用跟 cut 的 - d 一个意思
-n :使用纯数字排序
-r :反向排序
-u :去重复
-kn1,n2 :由 n1 区间排序到 n2 区间,可以只写 - kn1,即对 n1 字段排序
实例:
1,如果 sort 不加任何选项,则从首字符向后,依次按 ASCII 码值进行比较,最后将他们按升序输出.
2,-t 后面跟分隔符,-k 后面跟数字,表示对第几个区域的字符串排序,-n 则表示使用纯数字排序(看第 3 列的排序)
3,-k3,5 表示从第 3 到第 5 区域间的字符串排序,-r 表示反向排序
命令 : wc
用于统计文档的行数,字符数,词数,常用的选项为:
-l :统计行数
-m :统计字符数
-w :统计词数
wc 不跟任何选项,直接跟文档,则会把行数,词数,字符数依次输出.
uniq 命令
uniq 用来删除重复的行,该命令 - c 选项比较常用,-c 表示统计重复的行数,并把行数写在前面.
使用 uniq 的前提是需要先给文件排序,否则不管用.
命令 tee
[root@localhost ~]# uniq testb.txt
111
222
111
333
[root@localhost ~]# sort testb.txt |uniq
111
222
333
[root@localhost ~]# sort testb.txt |uniq -c
2 111
1 222
1 333
tee 后面跟文件名,其作用类似于重定向 >,比重定向多一个功能,把文件写入后面所跟的文件时并显示在屏幕上,通常用于管道符 | 后.
命令 tr
#echo "aaaaaaaaaaaaaaa" |tee testb.txt
aaaaaaaaaaaaaaa
#cat testb.txt
aaaaaaaaaaaaaaa
tr 用于替换字符,常用来处理文档中出现的特殊符号,如 DOS 文档中出现的符号 ^M .
选项:
-d 表示删除某个字符,后面跟要删除的字符.
-s 表示删除重复的字符.
把小写字母变成大写字母,如 tr'[a-z]''[A-Z]':
还可以替换一个字符:
#head -n2 /etc/passwd |tr'[a-z]''[A-Z]'
ROOT:X:O:O:ROOT:/ROOT:/BIN/BASH
BIN:X:11:BIN:/BIN:/SBIN/NOLOGIN
命令 split
#grep 'root' /etc/passwd |tr 'r' 'R'
Root:x:o:o:Root:/Root:/bin/bash
opeRatoR:x:11:0:opeRatoR:/Root:/sbin/nologin
split 用于切割文档,常用的选项为 - b 和 - l.
选项:
-b 表示依据大小来分割文档,单位为 byte
-l 表示依据行数来分割文档
如果 split 不指定目标文件名,则会以 xaa,xab...... 这样的文件名来存取切割后的文件.指定目标文件名,示例如下:
split -b
#mkdir split_dir
#cd !$
cd split_dir
#cp /etc/passwd ./
#split -b 500 passwd
#ls
passwd xaa xab xac xad xae
-l :依据行数来分割文档
# rm -f xa*
# split -b 500 passwd 123
# ls
# 123aa 123ab 123ac 123ad 123ae passwd
90 总用量
# split -l
# rm -f 123a*
# split -l 10 passwd
# wc -l *
45 passwd
10 xaa
10 xab
10 xac
10 xad
5 xae
二,shell 一些其他特殊符号
1,特殊符号 $
$ 可以用作变量前面的标识符,还可以和!结合使用.
!$ 表示上条命令的最后一个变量,本例中上条命令最后是 testb.txt,那么在当前命令下输入!$ 则表示 testb.txt.
#cd ..
#ls testb.txt
testb.txt
#ls !$
ls testb.txt
testb.txt
2,特殊符号;
在一行命令中运行两个或两个以上的命令,需要在命令之间加符号;.
#mkdir testb.txt ; touch test1.txt ; touch test2.txt ; ls -d test* 创建目录,创建文件,列出目录
3,特殊符号~
符号~ 代表用户的家目录,root 用户的家目录是 / root, 普通用户的家目录是 / home/username.
4,特殊符号 &
#cd ~
#pwd
/root
#su ccj
#cd ~
#pwd
/home/ccj
把一条命令放到后台执行,则需要加上符号 &,它通常用于命令运行时间较长的情况.比如,可以用在 sleep 后,如下所示:
[1]+ 运行中 sleep 30 &
#sleep 30 &
[1]3008
#jobs
5,重定向符号 >,>>,2 > 和 2>>
和 >> 分别表示取代和追加的意思.当我们运行一个命令报错时,报错信息会输出到当前屏幕.如果想重定向到一个文本,则要用重定向符号 2 > 或者 2>>,它们分别表示错误重定向和错误追加重定向.
#ls aaaa
ls:无法访问aaaa:没有那个文件或目录
ls:无法访问aaaa:没有那个文件或目录
#ls aaaa 2> /tmp/error
#cat /tmp/error
ls:无法访问aaaa:没有那个文件或目录
#ls aaaa 2>> /tmp/error
#cat /tmp/error
ls:无法访问aaaa:没有那个文件或目录
6,中括号 [ ]
中括号内为字符组合,代表字符组合中的任意一个,还可以表示一个范围(1-3,a-z).
7,特殊符号 && ||
#cd /tmp/10
#ls -d test*
test1.txt test2.txt testb.txt testdir
#ls -d test[1-3].txt
test1.txt test2.txt
#ls -d test[12b].txt
test1.txt test2.txt testb.txt
#ls -d test[1-9].txt
test1.txt test2.txt
#ls -d test[1-9a-z].txt
test1.txt test2.txt testb.txt
在上面刚刚提到了分号,用于多条命令间的分隔符.另外还有两个可以用于多条命令中间的特殊符号,那就是 "&&" 和 "||" 下面把这几种情况全列出:
使用 ";" 时,不管 command1 是否执行成功都会执行 command2;
command1 ; command2
command1 && command2
command1 || command2
使用 "&&" 时,只有 command1 执行成功后,command2 才会执行,否则 command2 不执行;
使用 "||" 时,command1 执行成功后 command2 不执行,否则去执行 command2,总之 command1 和 command2 总有一条命令会执行.
shell 中的特殊符号和 cut,sort,wc,uniq,tee,tr,split 命令
来源: http://www.bubuko.com/infodetail-2459313.html