1. globbing文件名通配,bash的基础特性
a. 匹配模式:元字符
i. *: 匹配任意长度的任意字符
1. pa*,*pa*, *pa, *p*a*
ii. ?: 匹配任意单个字符
1. pa?, ??pa, p?a, p?a?
iii. []:匹配指定范围内的任意单个字符,有几种特殊格式
1. [a-z], [A-Z]:不区分大小写,大写也可以识别
2. [[:upper:]]:大写字母 [[:upper:]] = [ABCDE…] 里面的大括号代表所有的大写字母,外面的括号代表取其中的一个,即ABC..Z = [:upper:] [^[:upper:]] = [^ABCDE…]
3. [[:lower:]]:小写字母
4. [[:alpha:]]:所有字母
5. [[:digit:]]:所有数字
6. [0-9]:0-9
7. [[:alnum:]]:所有字母和数字
8. [a-z0-9]:所有字母+数字
9. [[:space:]]:所有空白字符
10. [[:punct:]]:所有标点符号
iv. [^]:匹配指定范围外的任意单个字符
1. [^[:upper:]]:大写字母以外
2. [^0-9]:数字以外
3. [^[:alnum:]]:所有字母和数字以外
b. 转译:touch p\ a 创建p a目录,没有\则创建两个单独的,转译字符
c. 练习1:显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现一位任意字符的文件或目录
[root@localhost ~]#ls -d /var/l?[[:lower:]] /var/lib /var/log
d. 练习2:显示/etc目录下,以任意一位数字开头,且以非数字结尾的文件或者目录
[root@localhost ~]#ls -d /etc/[[:digit:]]*[^0-9] ls: cannot access /etc/[[:digit:]]*[^0-9]: No such file or directory [root@localhost ~]#mkdir /etc/9fe [root@localhost ~]#ls -d /etc/[[:digit:]]*[^0-9] /etc/9fe
e. 练习3:显示/etc目录下,以字母开头,后面跟一个字母d及其他任意长度任意字符的文件或目录
[root@localhost ~]#ls -d /etc/[[:alpha:]]d* /etc/adjtime /etc/kde4rc /etc/ld.so.cache
f. 练习4:复制/etc目录下,所有以m开头,以非数字结尾的文件或者目录至/tmp/andy
[root@localhost ~]#ls -d /etc/m*[^[:digit:]] /etc/magic /etc/makedev.d /etc/mime.types /etc/motd /etc/my.cnf /etc/mailcap /etc/man.config /etc/mke2fs.conf /etc/mtab /etc/mail.rc /etc/maven /etc/modprobe.d /etc/mtools.conf [root@localhost ~]#cp -r /etc/m*[^[:digit:]] /tmp/andy
g. 练习5:复制/usr/share/man目录下,所有以man开头,后跟一个数字结尾的文件或目录至/tmp/man/目录下
[root@localhost ~]#ls -d /usr/share/man/man[0-9] /usr/share/man/man1 /usr/share/man/man4 /usr/share/man/man7 /usr/share/man/man2 /usr/share/man/man5 /usr/share/man/man8 /usr/share/man/man3 /usr/share/man/man6 /usr/share/man/man9 [root@localhost ~]#ls -d /usr/share/man/man[4-6] /usr/share/man/man4 /usr/share/man/man5 /usr/share/man/man6
h. 练习6:复制/etc目录下。所有以.conf结尾,且以m,n,r,p开头的文件或者目录至/tmp/conf.d/目录下
[root@localhost ~]#ls -d /etc/[mnrp]*.conf /etc/mke2fs.conf /etc/nsswitch.conf /etc/pnm2ppa.conf /etc/request-key.conf /etc/mtools.conf /etc/ntp.conf /etc/prelink.conf /etc/resolv.conf /etc/named.conf /etc/pbm2ppa.conf /etc/readahead.conf /etc/rsyslog.conf /etc/nfsmount.conf /etc/pm-utils-hd-apm-restore.conf /etc/reader.conf
iii. # set -C
1. 禁止覆盖输出重定向至已存在的文件,但是可以追加
2. 可使用强制覆盖输出:>|,就是即使设置:set -C,但是可以通过>| 强制覆盖
iv. # set +C
1. 关闭上述特性,也就是可以覆盖
v. 示例:
[root@localhost ~]#cat test CentOS release 6.8 (Final) Kernel \r on an \m [root@localhost ~]#set -C [root@localhost ~]#echo hello > test -bash: test: cannot overwrite existing file [root@localhost ~]#echo hello >> test [root@localhost ~]#cat test CentOS release 6.8 (Final) Kernel \r on an \m hello [root@localhost ~]#set +C [root@localhost ~]#echo hello > test [root@localhost ~]#cat test hello
viii. 特殊设备:/dev/null,数据黑洞
1. 没有用的数据都可以重定向到null,重定向后不可找回数据,
2. 有的命令只用它执行的状态结果,而不用看具体的数据流
示例:执行echo命令后,不关心echo的内容,只关心这个命令是否执行成功,0表示成功,非0表示失败
[root@localhost ~]#echo "how are you" > /dev/null [root@localhost ~]#echo $? 0
ix. 输入重定向:<
xi. : <<: Here Document 此处创建文档
1. cat > /PATH/FROM/SOMEFILE <<END
a. # cat > /tmp/cat.out <<HEHE 将当前输入的字符输出到cat.out文件中,以HEHE为结束标志,此处创建文档
x. tr: 把输入的数据当中的字符,凡是在SET1定义范围内出现的,统统对位转换为SET2出现的字符
1. tr [OPTION]… SET1 [SET2]
a. # tr [a-z] [A-Z]
i. how are you? //要删除ctrl+backspace
ii. HOW ARE YOU?
b. 用法1:tr SET1 SET2 < /PATH/FROM/SOMEFILE
i. # tr [a-z] [A-Z] < /etc/issue 将文件输入重定向,内容的小写转换为大写
c. 用法2:tr -d SET1 < /PATH/FROM/SOMEFILE ,删除出现set1中的字符
i. # tr -d '[A-Z]' < /etc/issue 出现的大写的字符全部删除
d. 注意:不修改源文件
3. 管道:连接程序,实现将当前一个命令的输出流直接定向后一个程序当输入数据流
a. 格式:COMMAND1 | COMMAND2 | COMMAND3…
i. # cat /etc/issue | tr 'a-z' 'A-Z'
b. 组合小程序,完成复杂任务
[root@localhost ~]#cat /etc/issue CentOS release 6.8 (Final) Kernel \r on an \m [root@localhost ~]#cat /etc/issue | tr 'a-z' 'A-Z' CENTOS RELEASE 6.8 (FINAL) KERNEL \R ON AN \M
4. tee: 传输到管道,并且保留一份到文件 COMMAND | tee /PATH/TO/SOMEFILE
a. # cat /etc/issue | tee /tmp/a | tr 'a-z' 'A-Z' 保存过程中的文件,并传给下一个当做参数,可以将中间执行过程日志打印出来,非常方便
[root@localhost ~]#cat /etc/issue | tee /root/test | tr 'a-z' 'A-Z' CENTOS RELEASE 6.8 (FINAL) KERNEL \R ON AN \M [root@localhost ~]#cat test CentOS release 6.8 (Final) Kernel \r on an \m [root@localhost ~]#cat /etc/issue | tr 'a-z' 'A-Z' | tee /root/test1 CENTOS RELEASE 6.8 (FINAL) KERNEL \R ON AN \M [root@localhost ~]#cat test1 CENTOS RELEASE 6.8 (FINAL) KERNEL \R ON AN \M
5. # who | head -2 | tr 'a-z' 'A-Z' | tr -d '0-9'
a. 显示正在登陆的用户,通过管道传给第二个,显示前两个用户,将用户里面的所有小写字母全部转换成大写,删除里面的所有数字
–
–
–
评论前必须登录!
注册