Unix命令实用指南:grep、输出控制与重定向
1. 进程控制要点
在Unix系统中,程序和命令以进程的形式运行。所有进程都有一个标识符,
top
和
ps
命令可以显示这些标识符。而
kill
命令则需要这些标识符来终止进程。例如,当脚本运行时出现异常,可能需要使用
kill
命令结合进程标识符来停止脚本。了解进程控制对于编写和管理复杂脚本非常重要,它还允许我们暂停进程,并在前台和后台之间切换。
2. grep命令介绍
许多基于文本的数据文件采用每行一条记录的格式,
grep
命令就是用于快速搜索文件中匹配指定模式的行。其基本语法为:
grep [options] <pattern> <file>
其中,
<pattern>
是要搜索的字符模式,
<file>
是要搜索的文件。
grep
有很多实用的命令行选项,下面通过具体示例来说明。
2.1 示例操作
| 问题 | 命令 | 解释 |
|---|---|---|
| 哪些行包含字母“Man”? |
$ grep Man heroes_and_villains.txt
|
默认
grep
区分大小写,只匹配“Man”,输出匹配的行。
|
| 哪些行包含字母“Man”或“man”? |
$ grep -i Man heroes_and_villains.txt
|
-i
选项使搜索不区分大小写,匹配更多行。
|
| 哪些行不包含字母“Man”或“man”? |
$ grep -i -v Man heroes_and_villains.txt
|
-v
选项反转逻辑,显示不匹配的行。
|
| 哪些行只包含单词“Man”? |
$ grep -w Man heroes_and_villains.txt
|
-w
选项要求模式作为孤立单词出现,“Spider-Man”中的“Man”也会匹配。
|
| 有多少个反派? |
$ grep -c Villain heroes_and_villains.txt
|
-c
选项只显示匹配行的数量。
|
| 哪些特定行包含连续两个元音字母? |
$ grep -n -i [aeiou][aeiou] heroes_and_villains.txt
|
-n
选项显示匹配行的行号,
[aeiou][aeiou]
是正则表达式,用于匹配连续两个元音字母。
|
2.2 搜索多个文件
如果将“heroes_and_villains.txt”文件拆分为“heroes.txt”和“villains.txt”,可以使用
*.txt
来搜索多个文件。例如:
$ grep -i [dl]er *.txt
搜索结果会包含匹配文件的名称。
2.3 使用grep处理FASTA文件
FASTA文件是常用的序列数据格式,每个序列有一个以
>
开头的标题行。使用
grep
搜索FASTA文件时要特别小心,因为模式可能跨越多行。例如,搜索“CGTATAT”序列时:
$ grep -n -i CGTATAT yeast_chr1_orfs.fa
可能会遗漏跨越多行的匹配项。
mermaid格式流程图:
graph LR
A[开始] --> B{选择搜索模式}
B --> |特定字符串| C[使用grep <pattern> <file>]
B --> |不区分大小写| D[使用grep -i <pattern> <file>]
B --> |不匹配模式| E[使用grep -v <pattern> <file>]
B --> |统计匹配行数| F[使用grep -c <pattern> <file>]
C --> G[输出匹配行]
D --> G
E --> G
F --> H[输出匹配行数]
G --> I[结束]
H --> I
3. 查看和控制程序输出
3.1 cat命令
cat
命令用于快速查看文件内容,只需在命令后指定文件名:
$ cat yeast_chr1_orfs.fa
该命令适用于文件内容能在终端窗口显示的情况,执行完后会立即返回命令提示符。
3.2 head和tail命令
head
和
tail
命令分别用于查看文件的前几行和后几行,默认显示十行。例如:
$ head yeast_chr1_orfs.fa
$ tail yeast_chr1_orfs.fa
也可以使用
-n
选项指定显示的行数:
$ head -n 1 yeast_chr1_orfs.fa
通过以上内容,我们了解了
grep
命令的强大搜索功能,以及
cat
、
head
和
tail
命令在查看文件内容方面的应用。这些命令在Unix系统中非常实用,能帮助我们高效地处理文本数据。
Unix命令实用指南:grep、输出控制与重定向
4. 重定向输入和输出
在Unix系统中,命令的输出通常显示在终端窗口,但实际上可以将其视为数据流进行重定向。官方术语将命令的输出称为标准输出(有时简称为stdout),它可以“附加”到不同的地方,例如计算机屏幕。而与之相关但相反的数据流是标准输入(有时简称为stdin),它是为Unix程序提供输入的数据源,默认来源是键盘。
4.1 重定向标准输出
要将命令的标准输出重定向到文件,可以使用
>
符号。例如,我们想查找酵母染色体I上起始位置在前999个碱基对内的开放阅读框(ORF)的详细信息,并将结果保存到文件中,可以这样操作:
$ grep -E “from [0–9]{1,3}-” yeast_chr1_orfs.fa > verified_orfs.txt
这个操作的具体步骤如下:
1. 确认当前目录中存在酵母ORF文件
yeast_chr1_orfs.fa
。
2. 使用
grep
命令查找包含指定正则表达式的行。
3. 使用
>
符号将
grep
命令的输出重定向到
verified_orfs.txt
文件。
4. 确认
verified_orfs.txt
文件已生成,并使用
head
命令查看文件的前几行。
需要注意的是,如果重定向输出到一个已存在的文件,该文件将被覆盖。为了防止这种情况,可以启用
noclobber
设置:
set -o noclobber # for bash-type shells
set noclobber # for c-type shells
4.2 追加到现有文件
有时我们需要将命令的输出追加到现有文件中,这时可以使用
>>
符号。例如,使用
echo
命令将一行文本追加到
letter_to_grandad.txt
文件:
echo “P.S. I’m learning Unix … it’s great!” >> letter_to_grandad.txt
4.3 使用重定向与cat命令
cat
命令结合重定向操作可以更强大。例如,将多个文本文件合并为一个文件:
$ cat a.txt > all.txt
$ cat b.txt >> all.txt
$ cat c.txt >> all.txt
$ cat 1.txt >> all.txt
$ cat 2.txt >> all.txt
$ cat 3.txt >> all.txt
也可以一步完成:
$ cat a.txt b.txt c.txt 1.txt 2.txt 3.txt > all.txt
还可以使用通配符:
$ cat *.txt > all.txt
但使用通配符时,文件合并的顺序由文件名的ASCII值决定,并且可能会包含不需要的文件。
4.4 重定向标准输入
与重定向标准输出类似,我们可以使用
<
符号将标准输入重定向为从文件读取。以
tr
命令为例,通常它需要用户在命令启动后输入文本,使用重定向后可以直接从文件读取:
$ tr ‘A’ ‘a’ < yeast_chr1_orfs.fa
这个操作的具体步骤如下:
1. 准备好要处理的文件
yeast_chr1_orfs.fa
。
2. 使用
tr
命令指定要替换的字符。
3. 使用
<
符号将
yeast_chr1_orfs.fa
文件的内容作为标准输入提供给
tr
命令。
4.
tr
命令处理文件内容并输出结果。
实际上,很多命令都可以使用这种方式重定向标准输入,例如
grep
命令:
$ grep “pattern” datafile
$ grep “pattern” < datafile
这两种方式的结果相同,但前者将文件作为命令的参数,后者将文件内容作为标准输入。不过,有些命令行选项在重定向标准输入时可能无法正常工作,并且重定向标准输入通常只能读取一个文件。
以下是重定向操作的总结表格:
| 操作类型 | 符号 | 示例 | 说明 |
| — | — | — | — |
| 重定向标准输出 |
>
|
grep “Verified” yeast_chr1_orfs.fa > verified_orfs.txt
| 将命令输出写入文件,若文件存在则覆盖 |
| 追加到现有文件 |
>>
|
echo “text” >> letter_to_grandad.txt
| 将命令输出追加到文件末尾 |
| 重定向标准输入 |
<
|
tr ‘A’ ‘a’ < yeast_chr1_orfs.fa
| 从文件读取内容作为命令的标准输入 |
mermaid格式流程图:
graph LR
A[开始] --> B{选择重定向类型}
B --> |重定向标准输出| C[使用 > 符号]
B --> |追加到现有文件| D[使用 >> 符号]
B --> |重定向标准输入| E[使用 < 符号]
C --> F[指定输出文件]
D --> G[指定目标文件]
E --> H[指定输入文件]
F --> I[执行命令并写入文件]
G --> J[执行命令并追加内容]
H --> K[执行命令并读取文件内容]
I --> L[结束]
J --> L
K --> L
通过掌握这些Unix命令和重定向操作,我们可以更高效地处理文本数据,提高工作效率。无论是搜索特定信息、查看文件内容还是保存命令结果,这些技巧都能发挥重要作用。
超级会员免费看
2

被折叠的 条评论
为什么被折叠?



