Linux命令行(三)
管道符、重定向与环境变量
输入输出重定向
输入重定向是指把文件导入到命令中,输出重定向是指把原本要输出到屏幕的数据信息写入到指定文件中
相比于输入重定向,输出重定向使用频率要更高,所以进一步划分为标准输出重定向和错误输出重定向,以及覆盖写和追加写两种写入方式
- 标准输入重定向(STDIN,文件描述为0):
默认从键盘输入,也可以从其他文件或命令中输入 - 标准输出重定向(STDOUT,文件描述为1):
默认输出到屏幕 - 错误输出重定向(STDERR,文件描述为2):
默认输出到屏幕
输入重定向中用到的符号及其作用如下表所示
符号 | 作用 |
---|---|
命令 < 文件 | 将文件作为命令的标准输入 |
命令 << 文件 | 从标准输入中读入,直到遇见分界符才停止 |
命令 < 文件1 > 文件2 | 将文件1作为命令的标准输入并将标准输出到文件2 |
输出重定向中用到的符号及其作用
符号 | 作用 |
---|---|
命令 > 文件 | 将标准输出重定向到一个文件中(清空原有文件的数据) |
命令 2> 文件 | 将错误输出重定向到一个文件中(清空原有文件的数据) |
命令 >> 文件 | 将标准输出重定向到一个文件中(追加到原有内容的后面) |
命令 2>> 文件 | 将错误输出重定向到一个文件中(追加到原有内容的后面) |
命令 >> 文件2>&1 或 命令 &>> 文件 | 将标准输出与错误输出共同写入到文件中(追加到原有内容的后面) |
例:
通过标准重定向将man bash
命令原本要输出到屏幕的信息写入到文件readme.txt
中
man bash > readme.txt
管道命令符
把前一个命令原本要输出到屏幕的信息当作后一个命令的标准输入
例:
统计被限制登录的用户
grep /sbin/nologin /etc/passwd | wc -l
可使用多次管道命令符,如命令A | 命令B | 命令C
命令行的通配符
通配符就是通用匹配信息的符号,比如
- 星号
*
代表匹配0个或多个字符 - 问号
?
代表匹配单个字符
更多通配符如下表所示
通配符 | 含义 |
---|---|
[a-z] | 单个小写字母 |
[A-Z] | 单个大写字母 |
[a-Z] | 单个字母 |
[0-9] | 单个数字 |
[[:alpha:]] | 任意字母 |
[[:upper:]] | 任意大写字母 |
[[:lower:]] | 任意小写字母 |
[[:digit:]] | 所以数字 |
[[:alnum:]] | 任意字母加数字 |
[[:punct:]] | 标点符号 |
常用转义字符
四个最常用转义字符
- 反斜杠 \
- 单引号 ‘’
- 双引号 “”
- 反引号 ``
例:
衬衫的价格是九磅十五便士
echo “Price is \£9.15”
重要的环境变量
在Linux系统中,变量名称一般都是大写的,命令都是小写的
Linux中最重要的环境变量如下表所示
环境变量 | 作用 |
---|---|
HOME | 用户的主目录(家目录) |
SHELL | 用户在使用的Shell解释器名称 |
HISTSIZE | 输出的历史命令记录条数 |
HISTFILESIZE | 保存的历史命令记录条数 |
邮件保存路径 | |
LANG | 系统语言、语系名称 |
RANDOM | 生成一个随机数字 |
PS1 | Bash解释器的提示符 |
PATH | 定义解释器搜索用户执行命令的路径 |
EDITOR | 用户默认的文本编辑器 |
正则表达式
正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为 regex、regexp 或 RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。
字符 | 描述 |
---|---|
\ | 将下一个字符标记为一个特殊字符、或一个原义字符 例如,“n”匹配字符“n”。“\n”匹配一个换行符。序列“\”匹配“\”而“(”则匹配“(” |
^ | 匹配输入字符串的开始位置 |
$ | 匹配输入字符串的结束位置 |
{n} | n 是一个非负整数。匹配确定的 n 次 例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个 o |
{n,} | n 是一个非负整数。至少匹配 n 次 例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有 o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*” |
{n,m} | m 和 n 均为非负整数,其中 n<=m。最少匹配 n 次且最多匹配 m 次 例如,“o{1,3}”将匹配“fooooood”中的前三个 o。“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格 |
* | 匹配前面的子表达式零次或多次 例如,zo*能匹配“z”、“zo”以及“zoo”。*等价于{0,} |
+ | 匹配前面的子表达式一次或多次 例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,} |
? | 匹配前面的子表达式零次或一次 例如,“do(es)?”可以匹配“do”或“does”中的“do”。?等价于{0,1} |
? | 当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串 例如,对于字符串“oooo”,“o+?”将匹配单个“o”,而“o+”将匹配所有“o” |
. | 匹配除“\n”之外的任何单个字符。要匹配包括“\n”在内的任何字符,请使用像“(.|\n)”的模式 |
(pattern) | 匹配 pattern 并获取这一匹配的子字符串。该子字符串用于向后引用。要匹配圆括号字符,请使用 “(”,右括号同样 |
x | y | 匹配 x 或 y 例如,“z | food” 能匹配 “z” 或 “food”。“(z | f)ood”则匹配“zood”或“food” |
[xyz] | 字符集合(character class)。匹配所包含的任意一个字符 例如,“[abc]”可以匹配“plain”中的“a”。其中特殊字符仅有反斜线\保持特殊含义,用于转义字符。其它特殊字符如星号、加号、各种括号等均作为普通字符。脱字符^如果出现在首位则表示负值字符集合;如果出现在字符串中间就仅作为普通字符。连字符 - 如果出现在字符串中间表示字符范围描述;如果出现在首位则仅作为普通字符 |
[^xyz] | 排除型(negate)字符集合。匹配未列出的任意字符 例如,“[^abc]”可以匹配“plain”中的“plin” |
[a-z] | 字符范围。匹配指定范围内的任意字符 例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符 |
[^a-z] | 排除型的字符范围。匹配任何不在指定范围内的任意字符 例如,“[^a-z]”可以匹配任何不在“a”到“z”范围内的任意字符 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ICARUS!
评论