我想使用 Unix 的grep函数从一个命令行中的文件中提取多行(使用不同的关键字)。
例如,我有类似的东西:
doc-A1-151
file-A2-15646
table-A3-1654
file-B1-15654
doc-B2-15654
table-B3-13546
file-C1-164654
doc-C2-16354
table-C3-13565
Run Code Online (Sandbox Code Playgroud)
我想要一个只有 A1、B3 和 C2 行的文件的子版本。
我怎么做?
Grep 允许您使用正则表达式来匹配使用-E标志的文件中的模式,或者您可以使用egrep等效于的命令grep -E:
grep -E 'A1|B3|C2' filename
Run Code Online (Sandbox Code Playgroud)
或者
egrep 'A1|B3|C2' filename
Run Code Online (Sandbox Code Playgroud)
竖线|是 OR 运算符,表示匹配字符串 A1 或 B3 或 C2。
正则表达式语法因工具而异,但通常语法是相同的。这是我经常用来测试和构建正则表达式的 Ruby 正则表达式测试工具:http : //rubular.com/r/mJyIMO5hJN
但是,任何对正则表达式的介绍都应该以警告开头,警告它们的功能有限,格言是:
有些人在遇到问题时会想“我知道,我会使用正则表达式”。现在他们有两个问题。
找到了。将术语放在由新行分隔的文本文件中,然后将其输入为与-f标志匹配的模式。
模式文件.txt:
A1
B3
C2
Run Code Online (Sandbox Code Playgroud)
命令:
grep -f pattern_file.txt input_file.txt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48903 次 |
| 最近记录: |