只表示空格,不是匹配空格,匹配空格要写成[[:space:]]
[:punct:]:任意的标点字符,这里只表示标点符号,不是匹配标点符号,匹配空格要写成[[:punct:]]
案例演示
列出/var目录下,非字母开头,后面跟任意单个字母的txt文件
ls -l /var/[^[:alpha:]][[:alpha:]].txt
8、bash的快捷键
ctrl+l:清屏操作,相当于clear命令
ctrl+a:将光标跳转至命令的首部
ctrl+e:将光标跳转至命令的尾部
ctrl+c:取消命令执行
ctrl+u:删除光标所在位置之前的全部字符
ctrl+k:删除光标所在位置之后的全部字符
9、输入、输出重定向及管道
程序是由指令加数据组成,那么程序都有读入数据的需求(Input),程序也有输出数据的需求(Output)
程序读入数据的来源有很多:文件、用户键盘输入等
程序输出数据的地方有很多:保存至文件、输出到屏幕等
那么程序读入数据或者输出数据的选择就有很多,如果程序每一次执行时都需要指定程序读入数据或者输出数据的来源或者去处,这样会很麻烦,因此,就会有缺省或者说默认的值
缺省输入或者默认输入叫做标准输入,默认的或者缺省的输入是键盘输入
比如说cat命令,这里可以说是cat程序,如果你不指定文件,也就是数据来源,那么它默认从键盘获取你的输入。但是有些命令自身具有默认的数据输入位置,比如ls命令,如果不给定ls命令输入的数据,那么默认以当前位置为输入数据
缺省输出或者默认输出叫做标准输出,默认的或者缺省的输出是监视器(monitor)
默认的错误输出或者缺省的错误输出叫做标准错误输出
不管是bash报错还是某个命令自身报错都属于标准错误输出,这个输出是与标准输出不相瓜葛的输出,即是一个独立的输出数据流,但是他的输出位置默认是监视器(monitor)
I/O重定向:改变标准输入或者标准输出的位置
输出重定向( >、>> )
语法
COMMAND > new_pos
COMMAND >> new_pos
分类
>:表示覆盖重定向,目标文件原有内容会被覆盖
案例演示
[root@oldboy ~]# ls /var > /tmp/var.txt
>>:追加重定向,在目标文件原有内容下追加新内容
案例演示
[root@oldboy ~]# ls /etc/ >> /tmp/etc.txt
注意:输出重定向是非常危险的操作,误操作就可能把你的重要数据给覆盖了。
问题:bash中有没有可以设置关闭和打开这个输出重定向功能呢?
解决方式
set -C 命令:禁止将内容覆盖输出到已有文件内容,但是不存在的文件是可以进行输出重定向的,这个对标准错误输出也起作用
另外一个现实:
输出重定向新问题:bash支持强制输出覆盖:>|
案例演示
cat /etc/fstab >| /tmp/a.txt
set +C命令:关闭禁止将内容覆盖输出到已有文件内容,也就是可以覆盖输出到已有内容的文件
标准错误输出
当我们执行一条有时命令会报错,但是这个错误输出默认是输出到监视器,那么我们怎么重定向这个标准的错误输出呢?
标准错误输出重定向
语法
COMMAND 2> new_pos
COMMAND 2>> new_pos
分类
2>:表示覆盖重定向错误输出流,目标文件原有内容会被覆盖
案例演示
[root@oldboy ~]# ls /varr 2> /tmp/var.txt
2>>:表示追加重定向错误输出流,在目标文件原有内容下追加新内容
案例演示
[root@oldboy ~]# ls /etcc/ 2>> /tmp/etc.txt
我们想把错误的输出或者正确的输出到不同位置
语法
COMMAND >> new_pos 2>> err_new_pos
COMMAND > new_pos 2> err_new_pos
错误或者正确的输出流合并至同一个数据流进行重定向
语法
COMMAND &> new_pos
COMMAND &>> new_pos
COMMAND > new_pos 2> &1
&>:覆盖重定向
&>>:追加重定向
2> &1:表示将标准错误的输出流导向与标准输入出流同一个地方,而标准输出流导向了一个文件,那么标准错误输出流也导向与标准输出流同样的地方
输入重定向
输入重定向使用的意义:有些命令在执行时不能够带文件作为参数的命令,默认只能从标准输入中读数据,那么我们可以强行使用输入重定向让他从文件获取数据
语法
COMMAND < old_pos
old_pos为一个文件或者其他数据来源
输入重定向有没有使用两个小于号的必要?其实是有的,(<<)两个小于号是用来创建文档的
案例演示
[root@oldboy ~]# cat <<EOF
> 123
> asd
> qe
> 123
>
> EOF
123
asd
qe
123
这个有什么用呢?
默认从键盘键入的字符,输出到的是监视器上,那么我们可以将这些输出的字符重定向到我们指定的文件
案例演示
[root@oldboy ~]# cat >> /tmp/b.txt <<EOF
> hello world
> are you ok?
> thanks
> byebye
> EOF
[root@oldboy ~]# cat /tmp/b.txt
hello world
are you ok?
thanks
byebye
管道
基本介绍
我们可以将一个命令的输出当做另一个命令的输入,并且这个样无限下去
基本语法
COMMAND1 | COMMAND2 | COMMAND3....
使用案例
[root@oldboy ~]# echo $PATH | tr 'a-z' 'A-Z'
/USR/LIB64/QT-3.3/BIN:/USR/LOCAL/SBIN:/USR/LOCAL/BIN:/SBIN:/BIN:/USR/SBIN:/USR/BIN:/ROOT/BIN
未完,待续......
&n