阿汤博客-承接中小企业服务器维护和网站维护,有意者可以联系博主!

bash的基础特性、IO重定向及管道

学习笔记 307℃ 0评论

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]

转载请注明:阿汤博客 » bash的基础特性、IO重定向及管道

喜欢 (0)or分享 (0)