通配符:
符号 | 意义 |
* | 0到无穷个任意字符 |
? | 一个任意字符 |
[] | 如[abcd]表示a,b,c,d中任意一个 |
[-] | 在编码顺序内的所有字符,如[0-9]表示0到9间的数字 |
[^] | 反向选择,如[^abc]表示非a,b,c的其它字符 |
特殊符号:
符号 | 内容 |
| | 管线:分割两个管线命令的界定 |
& | 工作控制:将指令变为后台运行 |
>,>> | 数据流重导向:输出导向,分别是“取代”与“累加” |
<,<< | 数据流重导向:输入导向 |
(1)数据流重导向:将某个指令执行后应该出现在屏幕上的数据(stdout/stderr)传输到其它地方
- 标准输入(0):使用<或<<
- 标准输出(1):使用>或>>
- 标准错误(2):使用2>或2>>(不写数字默认为1)
例子:
例1:
ll / > ~/rootfile #输出根目录内容到文件
>:如果文件不存在则创建,存在则覆盖
>>:存在则追加
例2:
find /home -name .bashrc>list_right 2>list_error #将stdout与stderr存到不同的档案
例3:将正确和错误的信息都写入list中
find /home -name .bashrc>list 2>list #错误
find /home -name .bashrc>list 2>&1 #正确
find /home -name .bashrc &>list #正确
例4:
cat > catfile #用户输入字符,然后保存到catfile中
cat > catfile < ~/.bashrc #输入的字符由bashrc提供保存在catfile中(拷贝)
例5:
cat > catfile << "eof" #<<代表结束的输入字符,输入eof则结束输入
注意:
- /dev/null黑洞设备,可以将不需要的信息输出到/dev/null中
find /home -name .bashrc 2>/dev/null #将错误数据丢弃,正确数据显示到屏幕
(2)管道符号“|”的使用:
ls -al /etc|less #ls的stdout作为less命令的stdin
- 在"|"后面的指定必须是管线命令(可以接受stdin),如less、more、head、tail
- 管线命令仅会处理stdout,对于stderr会忽略
常见管道命令例子:
1.cut
cut -d '分隔字符' -f fields #-f为取出第几段,结果下标从1开始
cut -c 字符区间 #以字符为单位取出固定字符区间
例:
echo $PATH | cut -d ':' -f 5 #取出第5个
echo $PATH | cut -d ':' -f 3,5 #取出第3与第5个
export | cut -c 12- #取出第12个字符后的字符串
export | cut -c 12-20 #取出12-20的字符串
2.grep
选项:--color=auto 可在结果中高亮关键字
例:
last | grep 'root' #取出有root的行
last | grep -v 'root' #取出没有root的行
last | grep 'root' |cut -d ' ' -f1 #取出有root的行的第一列
3.sort:排序
-t:分割符 -k:以分隔结果的哪个区间排序 -r:反向排序 -f:忽略大小写 -b:忽略最前面的空格 -n以数字排序
例:将帐号进行排序
cat /etc/passwd | sort
cat /etc/passwd | sort -t ':' -k 3 #以第三栏排序
cat /etc/passwd | sort -t ':' -k 3 -n #上述排序以字符串排序,1会出现在11后面,-n指出按数字排序
4.uniq:去除重复
例:
last | cut -d ' ' -f1 | sort | uniq [-c] #去除重复,-c为计数
5.wc:统计
例:
cat /etc/man.config | wc #输出的三个数字分别代表:行、字数、字符数
6.tee:作为管道的输入,同时也输出到屏幕
last | tee last.list #输出到屏幕和last.list
7.tr:删除或替换文字
-d:删除后面接的字符串 -s:取代重复的字符
例:
last | tr '[a-z]' '[A-Z]'
cat /etc/passwd | tr -d ':' #将结果中的冒号删除
减号-的用途
在管道命令中,会用前一个指令的stdout作为这次的stdin,某些指令需要用到文件名来处理时,该stdin与stdout可以利用减号“-”来代替。例:
tar -cvf - /home | tar -xvf -
- 用tar打包/home,文件名位置填“-”,打包的数据传送到stdout,则后面的tar的“-”就是前一个指令的stdout。