Linux文本解析与服务管理实用指南
立即解锁
发布时间: 2025-09-09 02:01:26 阅读量: 12 订阅数: 54 AIGC 


Linux终端高效技巧精要
# Linux文本解析与服务管理实用指南
## 1. 正则表达式(Regex)
正则表达式并非一种实用工具,而是一种文本解析的标准形式,被多种实用工具和编程语言所采用。它是“regular expressions”的缩写,能提供一个模式来测试字符串。
### 1.1 基本示例
假设要匹配“Hello”或“Hi”,正则表达式可以写成:
```
(Hello|Hi)
```
使用`grep`工具时,可借助`-E`选项来使用扩展正则表达式。例如,在`/tmp/hello.txt`文件中添加一行“Hi 1”,然后执行以下命令:
```bash
echo "Hi 1" >> /tmp/hello.txt
grep -E '(Hello|Hi)' /tmp/hello.txt
```
执行该命令后,会返回所有匹配的行,并高亮显示匹配部分。
### 1.2 正则表达式在其他工具和语言中的应用
正则表达式的格式可用于多种实用工具和编程语言,如Perl、JavaScript、Python和Ruby等。若安装了Perl,可使用相同的正则表达式:
```bash
perl -pe '(Hello|Hi)' /tmp/hello.txt
```
### 1.3 复杂模式匹配
#### 1.3.1 序列号匹配
假设产品序列号的模式为“数字 数字 数字 字母 字母 数字”,可用以下正则表达式表示:
```
[0-9][0-9][0-9][a-zA-Z][a-zA-Z][0-9]
```
若想让首位数字只能是3、5或8,可将表达式更新为:
```
[358][0-9][0-9][a-zA-Z][a-zA-Z][0-9]
```
#### 1.3.2 电话号码匹配
常见的电话号码模式可表示为:
```
[0-9]{3}[-][0-9]{3}[-][0-9]{4}
```
此表达式要求电话号码中必须有连字符。若想让连字符可选,可使用`?`符号:
```
[0-9]{3}[-]?[0-9]{3}[-]?[0-9]{4}
```
为测试该表达式,可在`/tmp/numbers.txt`文件中添加一个电话号码“519-555-0100”,然后执行以下命令:
```bash
grep -E '[0-9]{3}[-]?[0-9]{3}[-]?[0-9]{4}' /tmp/numbers.txt
```
该命令应仅返回包含电话号码的新行。
#### 1.3.3 电子邮件匹配
常见的电子邮件匹配正则表达式为:
```
\S+@\S+\.\S+
```
若在`/tmp/numbers.txt`文件中添加一个电子邮件地址,可使用以下命令进行测试:
```bash
grep -E '\S+@\S+\.\S+' /tmp/numbers.txt
```
### 1.4 常用正则表达式符号
| 特殊字符 | 描述 |
| ---- | ---- |
| \s | 匹配任何空格或制表符 |
| \S | 匹配任何非空格字符 |
| \d | 匹配任何数字 |
| \D | 匹配任何非数字字符 |
| \w | 匹配任何单词字符 |
| \W | 匹配任何非单词字符 |
| . | 匹配任何字符 |
| ^ | 行的开始 |
| $ | 行的结束 |
| * | 匹配前一个字符零次到任意多次 |
| + | 匹配前一个字符一次或多次 |
| ? | 匹配前一个字符零次或一次 |
| \| | 用于“或”表达式的符号 |
## 2. awk工具
awk是一种模式扫描和处理语言,也是命令行实用工具,擅长处理格式化的文本数据。
### 2.1 示例数据
创建`/tmp/users.txt`文件,内容如下:
```
Jesse 4557389203 [email protected] xl 1991 1
Matt 8839293940 [email protected] s 1983 1
Jeff 8493739304 [email protected] l 1980 3
Sarah 4939304952 [email protected] m 1974 2
```
### 2.2 基本操作
#### 2.2.1 打印指定列
若想查看所有电子邮件地址,可执行以下命令:
```bash
awk '{ print $3 }' /t
```
0
0
复制全文
相关推荐









