bash的基础特性:
globbing:文件名通配(整体文件名匹配,而非部分)
匹配模式:元字符
*:匹配任意长度的任意字符
例:pa* 以pa开头的都符合
*pa* 包含pa的都符合
*pa 以pa结尾的都符合
*p*a* 里边有p,有a不在一起的都符合
?:匹配任意单个字符
pa?
pa 不符合
paa 符合
passwd 不符合
??pa
p?a
p?a?
[]:匹配指定范围内的任意单个字符
有几种特殊格式:
[a-z],[A-Z] 注意:在这儿不区分大小写的
[0-9] 表示任意单个数字
[a-z0-9] 表示数字,或英文字母都可以
[abcxyz] 在前边字母中任意一个字母
[[:upper:]] 表示所有大写字母
[[:lower:]] 表示所有小写字母
[[:alpha:]] 表示所有字母
[[:digit:]] 表示所有数字
[[:alnum:]] 表示所有的字母和数字
[[:space:]] 表示所有空白字符
[[:punct:]] 表示所有标点符号
例:表示pa后边有两位数字 pa[0-9][0-9]
表示200-299 2[0-9][0-9]
[^]:匹配指定范围外的任意单个字符
[^[:upper:]] 非大写字符之外的单个字符
[^0-9] 非数字之外的单个字符
[^[:alnum:]] 非所有字母和数字外的单个字符
IO重定向及管道
程序:指令+数据
程序:必须要有IO,每个程序必定有输入输出的地方
可用于输入的设备:文件
例如:键盘设备、文件系统上的常规文件、网卡等
可用于输出的设备:文件
显示器、文件系统上的常规文件、网卡等
程序的数据流有三种:
输入的数据流:<--标准输入(stdin),键盘
输出的数据流:-->标准输出(stdout),显示器
错误输出流: -->错误输出(stderr),显示器
生成的文件有与之对应的fd:file descriptor,文件描述符
标准输入:0
标准输出:1
错误输出:2
IO重定向:
输出重写向:>
特性:覆盖输出
输出重定向:>>
特性:追加输出
# set -C
禁止覆盖输出重写向已存在的文件
此时可使用强制覆盖输出:>|
# set +C
关闭"set -C"的功能
# cat /etc/issue > /tmp/issue.out
可以看到上边不让覆盖已存在的文件
# cat /etc/issue >| /tmp/issue.out
如果想要强行覆盖已存在的文件,可以用“>|”
错误输出流重定向:2>,2>>
合并正常输出流和错误输出流:
第一种:&>
&>>
第二种:COMMAND > /PATH/to/somefile 2>&1
COMMAND >> /PATH/to/somefile 2>&1
特殊设备: /dev/null
放到这个文件里边的数据都会被丢弃,如果我们不需要数据流的时候可以放到这个里边
比如有时候我们只需要命令的状态结果,而非数据时就可以用到这个特殊设备
输入重定向:<
tr命令:
tr 命令用于转换或删除文件中的字符。
tr 指令从标准输入设备读取数据,经过字符串转译后,将结果输出到标准输出设备。
tr [OPTION]... SET1 [SET2]
把输入的数据当中的字符,凡是在SET1定义范围内出现的,通通对位转换为SET2出现的字符
参数说明:
-c, --complement:反选设定字符。也就是符合 SET1 的部份不做处理,不符合的剩余部份才进行转换
-d, --delete:删除指令字符
-s, --squeeze-repeats:缩减连续重复的字符成指定的单个字符
-t, --truncate-set1:削减 SET1 指定范围,使之与 SET2 设定长度相等
用法1:
tr SET1 SET2 < /PATH/form/somefile
用法2:
tr -d SET1 < /PATH/form/somefile
注意:不修改原文件
Here Document:<<
cat << EOF
cat > /PATH/to/somefile << EOF
管道:|
连接程序,实现将前一个命令的输出直接定向后一个程序当作输入
COMMAND1 | COMMAND2 | COMMAND3 ……
tee命令:
把前一个命令的结果既保存一份到文件中,又把结果输出到显示器中
COMMAND | tee /PATH/to/somefile
练习1:把/etc/passwd文件的前6行的小写输出为大写
# head -6 /etc/passwd | tr 'a-z' 'A-Z'