3. Linux文件名通配glob以及io重定向
globbing:文件名通配(整体文件名匹配,而非部分文件)
匹配模式:元字符
* :匹配任意长度的任意字符
[root@myEcs tmp]# ls -d /etc/pa* //查看etc下所有以pa开头的文件 /etc/pam.d /etc/papersize /etc/passwd /etc/passwd-
?:用于匹配任意单个字符
[root@myEcs tmp]# ls /etc/passw? //匹配以passw开头任意单个字符结尾的文件 /etc/passwd
[]:匹配指定范围内的任意单个字符
[root@myEcs tmp]# ls -d /etc/pa[a-z]* //匹配以pa开头中间包含a-z任意单个字符的文件。 /etc/pam.d /etc/papersize /etc/passwd /etc/passwd-
有几种特殊格式:
[a-z]:匹配a-z任意单个字符
[A-Z]:匹配A-Z任意单个字符
[a-z0-9]:匹配a-z或0-9任意单个字符
[abcxyz]:匹配abcxyz任意单个字符
[[:upper:]]:所有大写字母
[root@myEcs tmp]# ls [[:upper:]][[:upper:]][[:upper:]] //列出三个都是大写的任意字母的目录 ABC: DEF:
[[:lower:]]:所有小写字母
[root@myEcs tmp]# ls [[:lower:]][[:lower:]][[:lower:]] //列出三个都是小写的任意的字母的目录 abc: def:
[[:alpha:]]:所有字母
[[:digit:]] :所有数字
[[:alnum:]]:所有的字母和数字
[[:space:]]:所有的空白字符
[[:punct:]]:标点符号
[^]:匹配指定范围外的任意单个字符
[^[:upper:]]:匹配除了大写字母之外的任意单个字符
[^[:lower:]]:匹配除了小写字母以外的任意单个字符
[^[:digit:]]:匹配除了数字以外的任意单个字符
练习:
1. 显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现一位任意字符的文件或目录
[root@myEcs ~]# ls -d /var/l?[[:lower:]] /var/lib /var/log
2. 显示/etc目录下,一任意一位数字开头,且非数字结尾的文件或者目录。
[root@myEcs ~]# ls /etc/[[:digit:]]*[^[:digit:]] /etc/3abc
3. 显示/etc目录下以非字母开头,后面跟一个字母及其它任意长度任意字符的文件或目录
[root@myEcs ~]# ls -d /etc/[^a-z][a-z]* /etc/3abc
4. 复制/etc目录下,所有以m开头,以非数字结尾的文件或目录至/tmp/test.com目录
[root@myEcs ~]# mkdir /tmp/test.com && cp -r /etc/m*[^1-9] /tmp/test.com [root@myEcs ~]# ls /tmp/test.com/ machine-id mail.rc mapi modprobe.d mtab magic makedumpfile.conf.sample mime.types modules-load.d my.cnf mailcap man_db.conf mke2fs.conf motd my.cnf.d
5. 复制/usr/share/man目录下,以man开头,后跟一个数字结尾的文件或目录至/tmp/man目录下。
[root@myEcs ~]# mkdir /tmp/man && cp -r /usr/share/man/man[1-9] /tmp/man [root@myEcs ~]# ls /tmp/man/ man1 man2 man3 man4 man5 man6 man7 man8 man9
6. 复制/etc目录下,所有以.conf结尾,且以m,n,r,p开头的文件或目录至/tmp/conf.d/目录下
[root@myEcs ~]# mkdir /tmp/conf.d && cp -r /etc/[mnrp]*.conf /tmp/conf.d [root@myEcs ~]# ls /tmp/conf.d/ man_db.conf nscd.conf pear.conf request-key.conf mke2fs.conf nsswitch.conf php-fpm.conf resolv.conf nfs.conf ntp.conf pool.conf rsyncd.conf nfsmount.conf numad.conf radvd.conf rsyslog.conf
IO重定向及管道
可用于输入的设备:文件,键盘设备,文件系统上的常规文件,网卡等。
可用于输出的设备:文件,显示器,文件系统上的常规文件,网卡等。
程序的数据流有三种:
输入的数据流:<-- 标准输入(stdin)键盘。
输出的数据流:--> 标准输出(stdout)显示器
错误输出流: --> 错误输出(stderr)显示器
问价描述符:fd
标准输入:0
标准输出:1
错误输出:2
IO重定向
输出重定向:>
特性:覆盖输出
输出重定向:>>
特性:文件尾部追加
特殊设备:/dev/null
set -C:禁止覆盖输出重定向以及存在的文件。
[root@myEcs tmp]# set -C [root@myEcs tmp]# echo "huangxiaojun" > a.txt -bash: a.txt: 无法覆盖已存在的文件
强制覆盖输出:加一个|
[root@myEcs tmp]# echo "huangxiaojun" >| a.txt [root@myEcs tmp]#
set +C:关闭禁止覆盖输出重定向。
[root@myEcs tmp]# set +C [root@myEcs tmp]# echo "黄晓君" > a.txt [root@myEcs tmp]#
错误输出流重定向:2> , 2>>
cat: /etc/passwd1: 没有那个文件或目录 [root@myEcs tmp]# cat /etc/passwd1 2> /tmp/b.txt //将错误输出信息重定向到指定文件 [root@myEcs tmp]#
合并正常输出流和错误输出流:
方式1:&> &>>
[root@myEcs tmp]# cat /etc/passwd1 2> /tmp/b.txt [root@myEcs tmp]# cat /etc/passwd &> /tmp/b.txt // 不管是错误输出或者是正确输出,都重定向到一个文件中去 [root@myEcs tmp]# cat /etc/passwd1 &> /tmp/b.txt [root@myEcs tmp]# cat /tmp/b.txt cat: /etc/passwd1: 没有那个文件或目录
方式2:COMMAND > /path/to/file 2>&1
COMMAND > /path/to/file 2>&1
[root@myEcs tmp]# cat /etc/passwd > /tmp/a.txt 2>&1 [root@myEcs tmp]# cat /etc/passwd1 > /tmp/a.txt 2>&1 [root@myEcs tmp]# tail -10 /tmp/a.txt cat: /etc/passwd1: 没有那个文件或目录
输入重定向:<
[root@myEcs ~]# cat < /etc/passwd
tr [OPTIN]...SET1 [SET2]
把输入的数据当中的字符,凡是在SET1定义范围内出现的,统统对位转换为SET2字符
[root@myEcs ~]# tr [a-z] [A-Z] < /etc/issue //将内容转换成大写显示到屏幕 \S KERNEL \R ON AN \M
-d:指定删除指定的字符。不会修改源文件
[root@myEcs ~]# tr -d [a-z] < /etc/issue \S K \ \ [root@myEcs ~]#
<< :此处创建文档。
[root@myEcs tmp]# cat > /tmp/a.txt << END > hello world > How are you? > what are you doing? > END [root@myEcs tmp]# cat /tmp/a.txt hello world How are you? what are you doing? [root@myEcs tmp]#
管道:|把前一个命令的输出当成另一个命令的输入数据流,连接程序
command1 | command2 | command|...
[root@myEcs tmp]# cat /etc/passwd|tr "a-z" "A-Z" ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN DAEMON:X:2:2:DAEMON:/SBIN:/SBIN/NOLOGIN ADM:X:3:4:ADM:/VAR/ADM:/SBIN/NOLOGIN LP:X:4:7:LP:/VAR/SPOOL/LPD:/SBIN/NOLOGIN SYNC:X:5:0:SYNC:/SBIN:/BIN/SYNC SHUTDOWN:X:6:0:SHUTDOWN:/SBIN:/SBIN/SHUTDOWN ...
tee :前一次数据流发送给tee,tee后面指定文件保存当前数据流,再将这个数据流转发给后面的命令。tee命令经常和管道一起使用
[root@myEcs tmp]# cat /etc/issue|tee /tmp/issue.txt | tr 'a-z' 'A-Z' \S KERNEL \R ON AN \M [root@myEcs tmp]# cat /tmp/issue.txt \S Kernel \r on an \m [root@myEcs tmp]#

浙公网安备 33010602011771号