bash的基础特性
globbing:文件名速配(整体文件名匹配,而非部分)
匹配模式:元字符
*:匹配任意长度的任意字符
pa* pa,paa passwd
*pa* abdpaee
*pa rreeepa
*p*a* eeepdda eeepadd
?:匹配任意单个字符
pa? pab,paa,pac
??pa
p?a
p?a?
[ ]:匹配指定范围内的任意单个字符
有几种特殊格式
[a-z],[A-Z],[0-9],[a-z0-9]
[[:upper:]] 所有大写字母
[[:lower:]] 所有小写字母
[[:alpha:]] 所有字母
[[:digit:]] 所有数字
[[:alnum:]] 所有的字母和数字
[[:space:]] 所有空白字符
[[:punct:]] 所有标点符号
pa[0-9] pa3
pa[0-9][0-9] pa56
[^]匹配指定范围外的任意单个字符
[^[:upper:]]
[^[:alnum:]]
练习1:显示var目录下所有以l开头,以一个小写字母结尾,且中间出现任意一个字符的文件或目录
ls -d /var/l?[[:lower:]]
练习2:显示/etc目录,以任意一位数字开头,且以非数字结尾的文件或者目录
ls -d /etc/[0-9]*[^0-9]
练习3:显示/etc 目录下,以非字母开头,后面跟一个字母及其他任意字符任意长度的文件或者目录
ls -d /etc/[^a-z][a-z]*
练习4:复制/etc 目录下,所有以m开头,以非数字结尾的文件或者目录至/tmp/test123目录
cp -r /etc/m*[^0-9] /tmp/test123/
练习5:复制/usr/share/man目录下,所有以man开头后面跟一个数字结尾的文件或目录至/tmp/man目录
cp -r /usr/share/man/man[0-9] /tmp/man/
练习6:复制/etc目录下,所有以.conf结尾,并且以m,n,r,p开头的文件至/tem/conf.d/ 目录
cp -r /etc/[mnrp]*.conf /tmp/conf.d/
IO重定向及管道
程序:指令+数据
程序:IO
可用于输入的设备:文件
可用于输出的设备:文件
程序的数据流有三种:
输入的数据流:<--标准输入(stdin),键盘
输出的数据流:-->标准输出(stdout),显示器
错误输出流:--> 错误输出(stderr),显示器
fd: file descriptor , 文件描述符
标准输入:0
标注输出:1
错误输出:2
IO重定向:
输出重定向:>
特性: 覆盖输出
cat /etc/issue > /tmp/123.txt
输出重定向:>>
特性:追加输出
cat /etc/issue >> /tmp/123.txt
set -C
禁止覆盖输出重定向至已存在的文件
此时可使用强制覆盖输出: >|
set +C
关闭上述特性
错误输出流重定向:2>,2>>
合并正常输出流和错误输出流:
(1)&>, &>>
(2)COMMAND > /path/to/somefile 2>&1
COMMAND >> /path/to/somefile 2>&1
特殊设备:/dev/null
输入重定向: <
tr命令:
tr [OPTION]... SET1 [SET2]
把输入的数据当中的字符,凡是在SITE1定义范围内出现的,通通对位转换为SET2出现的字符
用法1:
tr SET1 SET2 < /path/from/somefile
tr [a-z] [A-Z] < /etc/issue 把所有字符替换为大写
用法2:
tr -d SET11 < /path/form/somefile
tr -d 'abc' < /etc/issue 删除abc字母
tr -d '[A-Z]' < /etc/issue 删除所有大写字母
注意:不修改源文件
Here Document: <<
cat << EOF
cat > /path/to/somefile <<EOF 写入到文件
管道:连接程序,实现将前一个命令的输出直接定向给后一个程序当作输入数据流
COMMAND1 | COMMAND2 | COMMAND3|
例:who | head -1 | tr [a-z] [A-Z] | tr -d [0-9]
tee命令:输出的
COMMAND | tee /path/to/somefile
练习1:把/etc/passwd文件的前六行转换为大写字母输出
head -n 6 /etc/passwd | tr [a-z] [A-Z]
2016年10月25日 下午2:38 沙发
访问您的博客已成习惯!