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指向其他文件。
输入重定向
通常从标准输入获取输入的命令可以有自己的方式从文件进行输入重定向。
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
.匹配不包括换行的任意字符\s空格 tab 换行
[\s\S]表示匹配任意字符- \S是\s的反义
*匹配0-n个+匹配1-n个\转义[]单字符取一个,比如[abc]会匹配a或b或c^字符串开始$字符串结束{1,3}循环次数?- 匹配一个或零个
- 非贪婪模式
|多数据选一()数据分界和取数据(?:)非捕获组- 分隔符
- 模式修饰符
1-65535 匹配正则
1 | 65530-65535 -> 6553[0-5] |
最后得:
`(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
- 创建一个匹配E-mail的正则表达式
- 用该正则表达式去匹配用户的输入