Contents

在Grep中转义双引号

1. 概述

*grep *是一个基于 Linux 的命令行工具,用于在文件内容中搜索模式。如果我们搜索包含一些特殊字符的模式,那么取消其内置的 shell 特性对于获得预期的搜索结果至关重要。

本教程将阐述在grep搜索模式中使用特殊字符的不同方法

2. Linux 中的特殊字符

在 Linux 中,有一组字符在 shell 中赋予特定含义——例如,# 表示注释,双引号 (“) 表示变量和命令替换,$ 表示变量表达式,& 表示后台作业,以命名很少。

现在,让我们创建一个名为employees.csv的 CSV 文件作为我们将在整个教程中使用的示例:

itcodingman@blogdemo:~/blogdemo$ cat employees.csv
#Name,Age,Team
Mary Smith,45,DevOps
John,"",NetOps
Jane Doe,25,DevOps
James,38,NetOps
Mary Robert,30,SRE
William,"",SRE

在本例中,我们正在搜索包含“ SRE ”或*“DevOps”*字样的行。随后,管道 ( | ) 命令将执行 OR 操作:

itcodingman@blogdemo:~/blogdemo$ grep -E "SRE|DevOps" employees.csv
Mary Smith,45,DevOps
Jane Doe,25,DevOps
Mary Robert,30,SRE
William,"",SRE

假设我们有兴趣搜索带有双引号的行。一开始我们可能认为这很简单:

itcodingman@blogdemo:~/blogdemo$ grep -E """ employees.csv
>

但是,shell 将假定搜索模式不完整并等待双引号的关闭

3. 字面上使用特殊字符

在上述情况下,我们希望按字面意思使用特殊字符,而不使用其固有的 shell 解释。引用和转义是两种允许按字面意思使用特殊字符的方法。

3.1. 引用

引用会使 shell 对特殊字符的固有行为无效。我们应该在字符之间使用单引号来实现这个方法。

由于其强大的特性,我们称单引号为*“强引用”,而我们称双引号为“弱引用”*。

itcodingman@blogdemo:~/blogdemo$ grep -E '"' employees.csv
John,"",NetOps
William,"",SRE

3.2. 转义

通常,反斜杠 ( \ ) 字符是另一种取消内置 shell 解释并告诉 shell 从字面上接受符号的选项。 让我们仔细看看用法:

itcodingman@blogdemo:~/blogdemo$ grep -E "\"" employees.csv
John,"",NetOps
William,"",SRE