Board logo

标题: 使用 Linux 文本工具简化数据的提取(3)fgrep与egrep [打印本页]

作者: look_w    时间: 2018-5-19 14:46     标题: 使用 Linux 文本工具简化数据的提取(3)fgrep与egrep

fgrepfgrep 会对文件搜索某个字符串,并打印包含这个字符串的所有行的内容。与 grep 不同的是,fgrep 搜索的是一个字符串,而不是可以匹配某个表达式的一种模式。fgrep 可以看作是 grep 在以下方面进行了增强:
假设我们希望从前面的 memo 文件中提取全部由大写字母组成的名字。为了查找 “STEPHEN” 和 “BRIAN”,我们需要执行两个单独的 grep 命令,如下所示:
1
2
3
4
5
# grep STEPHEN memo
3. STEPHEN FLEMING

# grep BRIAN memo
6. BRIAN LARA




使用 fgrep,只需要一个命令就可以实现相同的任务:
1
2
3
4
# fgrep "STEPHEN
> BRIAN" memo
3. STEPHEN FLEMING
6. BRIAN LARA




注意在这两项之间需要使用回车符号。如果没有这个回车符号,搜索就变成了查找一行中的 “STEPHEN BRIAN”。有了这个回车符号之后,它就会查找 “STEPHEN” 的匹配项,以及匹配 “BRIAN” 的项。
还要注意在目标文本两侧必须要放上引号。这样可以将文本与文件名区分开来。
除了在命令行上指定搜索项之外,我们也可以将它们放到一个文件中,并使用这个文件的内容来搜索其他文件。-f 选项让我们可以指定一个包含搜索项的主文件,其中可以列出经常搜索的内容。
举例来说,我们可以想像一个名为 “search_items” 的文件,其中包含了我们希望搜索的两项内容:
1
2
3
# cat search_items
STEPHEN
BRIAN




下面的命令在前面的 memo 文件中搜索 “STEPHEN” 和 “BRIAN”:
1
2
3
# fgrep -f search_items memo
3. STEPHEN FLEMING
6. BRIAN LARA




egrepegrep 是 grep 的一个功能更加强大的版本,它让我们可以一次搜索多个对象。要搜索的对象是使用回车符(与 fgrep 一样)或管道符(|)来分隔的。
1
2
3
4
5
6
7
8
# egrep "STEPHEN
> BRIAN" memo
3. STEPHEN FLEMING
6. BRIAN LARA

# egrep "STEPHEN | BRIAN" memo
3. STEPHEN FLEMING
6. BRIAN LARA




上面这两个命令都可以完成相同的工作。
除了搜索多个目标的功能之外,egrep 还提供了重复搜索和分组搜索的功能:
例如,假设您不记得 Brian 的姓是 “Lara” 还是 “Laras”。
1
2
# egrep "LARAS?" memo
6. BRIAN LARA




这次搜索会输出同时匹配 “LARA” 和 “LARAS” 的项。下面的搜索稍微有些不同:
1
2
# egrep "STEPHEN+" memo
3. STEPHEN FLEMING




它可以与 “STEPHEN”、“STEPHENN”、“STEPHENNN” 等匹配。
如果您正在查找一个单词加上它的一个派生词,可以在圆括号中包含派生词的标志字符。
1
2
3
4
# egrep -i "electron(ic)?s" memo
Sachin Tendulkar, who joins us from XYZ Consumer
Electronics as a national account manager covering
traditional mass merchants.




这会查找可以匹配 “electrons” 的项和可以匹配 “electronics” 的项。
总结一下:





欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0