Input/Output redirection and Regular expression

Input/Output redirection

管道命令

| : 将前一个命令的输出给下一个命令作为输入

仅将stdout传输到stdin

1
command1 | command2

管道技术是Linux间的一种通信技术,利用先进先出排队模型来指挥进程间的通信(可当作连接两个实体的一个单向连接器)。Linux管道可用于应用程序之间、linux命令之间、应用程序与命令间的通讯。shell编程指利用管道进行Linux命令之间的通信。

tee

write to both standard output and to a file

重定向命令

command description
command > file 将输出重定向到file
command < file 将输入重定向到 file
command >> file 将输出以追加的方式重定向到 file
n > file 将文件描述符为 n 的文件重定向到 file
n >> file 将文件描述符为 n 的文件以追加的方式重定向到 file
n >& m 将输出文件 m 和 n 合并
n <& m 输入文件 m 和 n 合并
<< tag 将开始标记 tag 和结束标记 tag 之间的内容作为输入

I/O重定向

基于标准数据流原理

  • 标准输入(stdin)0
  • 标准输出(stdout)1
  • 标准错误输出(stderr)2

重定向I/O的是shell而不是程序

对Linux进程来讲,每个打开的文件都是通过文件描述符(File Descriptor)来标识的,内核为每个进程维护了一个文件描述符表,这个表以FD为索引,再进一步指向文件的详细信息。在进程创建时,内核为进程默 认创建了 0、1、2 三个特殊的FD,这就是STDIN、STDOUT和STDERR

图片

I/O重定向也就是让已创建的FD指向其他文件。

Shell I/O重定向的原理解释

I/O重定向

输入重定向

通常从标准输入获取输入的命令可以有自己的方式从文件进行输入重定向。

1
command < file

file作为输入给command

1
command <<< string

string给command

输出重定向

一个命令的输出通常用于标准输出,也可以很容易地将输出转移到一个文件。

1
> file1.txt
1
: > filename

将filename变为空文件,size为0

文件不存在则创建

: 为占位 不产生输出

/dev/null

有时希望执行某个命令,但又不需要显示输出,则将输出重定向到/dev/null,从而丢弃输出

1
command > /dev/null

/dev/null

  • 写入的内容都会被丢弃
  • 无法读取内容
  • 达到“禁止输出”效果

错误输出不显示

1
2 > /dev/null

Regular Expression

正则表达式是什么?

记录文本规则的代码

正则表达式

通配符wildcard

  1. .匹配不包括换行的任意字符

  2. \s空格 tab 换行

  • [\s\S]表示匹配任意字符
  • \S是\s的反义
  1. *匹配0-n个
  2. +匹配1-n个
  3. \转义
  4. []单字符取一个,比如[abc]会匹配a或b或c
  5. ^字符串开始
  6. $字符串结束
  7. {1,3}循环次数
    • 匹配一个或零个
    • 非贪婪模式
  8. |多数据选一
  9. ()数据分界和取数据
  10. (?:)非捕获组
  11. 分隔符
  12. 模式修饰符

正则字符

入门教程

1-65535 匹配正则

1
2
3
4
5
6
65530-65535  ->  6553[0-5]
65500-65529 -> 655[0-2][0-9]
65000-65499 -> 65[0-4][0-9]{2} 第三位区间0-4,后两位0-9
60000-64999 -> 6[0-4][0-9]{3} 第二位区间0-4,后三位0-9
10000-59999 -> [1-5][0-9]{4} 第一位区间1-5,后四位0-9
1-9999 -> [1-9][0-9]{0,3} 第一位只能是1-9,后三位可有可无

最后得:

`(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{0,3})

应用

  • 判断一个字符串是否合法的E-mail
  1. 创建一个匹配E-mail的正则表达式
  2. 用该正则表达式去匹配用户的输入