重定向和通配符扩展

本章介绍了 Linux 操作系统中的重定向和通配符扩展:包括 catsplit 命令以及管道 | 的使用;有关通配符 ?, *, [abc] 等的使用,快速查找文件内容和处理命令输入输出。

1 重定向

1.1 cat 和 split

1.1.1 cat命令

功能:连接文件并打印到标准输出,支持文本处理功能。
参数

参数 功能描述
-n 显示行号(包括空行)
-b 显示行号(跳过空行)
-s 压缩连续空行为一行
-A 显示不可打印字符(如^I代表Tab,$代表换行)

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 合并两个文件
cat file1 file2 > merged_file

# 显示行号(含空行)
cat -n tmp.txt
# 结果:
# 1 id name desc
# 2
# 3 1 John 99

# 显示不可打印字符
cat -A tmp.txt
# 结果:
# id^Iname^Idesc$
# $
# 1^IJohn^I99$

示例

1.1.2 split命令

功能:将大文件拆分为多个小文件。
参数

参数 功能描述
-l N 按每N行拆分
-b SIZE 按文件大小拆分(如900K
-d 使用数字后缀(如00, 01
-a N 指定后缀长度(默认2位)

示例

1
2
3
4
5
# 拆分二进制文件为900KB片段
split -d -b 900k /bin/bash bash_part.

# 合并拆分文件
cat bash_part.00 bash_part.01 > restored_bash

示例

1.2 重定向基本原理和机制

1.2.1 文件描述符

标准输入/输出
0(STDIN):默认从键盘读取输入。
1(STDOUT):默认输出到屏幕。
2(STDERR):默认输出错误到屏幕。

1.2.2 重定向操作

输入重定向:将 input.txt 的内容读到命令 command 后作为命令的输入

1
2
# 从文件读取输入
command < input.txt

示例

输出重定向:将命令的输出写入文件

1
2
3
4
# 覆盖写入文件
command > output.txt
# 追加写入文件
command >> output.txt

示例

错误重定向

1
2
3
4
# 将错误输出到文件
command 2> error.log
# 合并标准输出和错误到同一文件
command &> combined.log

1.3 管道

1.3.1 管道机制

语法cmd1 | cmd2 | cmd3
功能:将前一个命令的 STDOUT 输出作为下一个命令的 STDIN 输入。
示例

1
2
# 统计包含"error"的行数
grep "error" log.txt | wc -l

1.3.2 tee 命令

功能:将数据同时输出到文件和屏幕。
示例

1
2
# 将输出保存到文件并显示在屏幕
ls /usr/bin | grep zip | tee ziplist.txt

2 通配符扩展

2.1 通配符模式

2.1.1 基础通配符

?:匹配单个字符。

1
ls file?.txt  # 匹配 file1.txt, fileA.txt

*:匹配任意数量字符。

1
ls *.log      # 匹配所有.log文件

2.1.2 字符集合

[abc]:匹配a、b、c中的任意一个字符。

1
ls file[123].txt  # 匹配 file1.txt, file2.txt, file3.txt

[a-z]:匹配范围(依赖本地化设置)。

1
ls [a-c]*.txt     # 匹配a、b、c开头的文件

2.2 通配符扩展

2.2.1 否定匹配

[!abc]:匹配不在集合中的字符。

1
ls file[!1-3].txt  # 排除file1-3.txt

2.2.2 特殊字符处理

转义字符:使用反斜杠\或引号避免扩展。

1
ls file\?.txt    # 匹配file?.txt字面量

2.3 扩展通配符(需启用extglob

2.3.1 模式扩展

启用和关闭扩展

1
2
shopt -s extglob  # 启用
shopt -u extglob # 关闭

语法
?(pattern):匹配 0 或 1 次。
*(pattern):匹配 0 或多次。
+(pattern):匹配 1 或多次。
@(pat1|pat2):匹配 pat1 或 pat2 。

2.3.2 示例

1
2
# 匹配所有.jpg或.png文件
ls @(*.jpg|*.png)