【发布时间】:2014-04-28 22:31:47
【问题描述】:
我有两个文件。一个是 SALESORDERLIST,如下所示
ProductID;ProductDesc
1,potatoes 1 kg.
2,tomatoes 2 k
3,bottles of whiskey 2 un.
4,bottles of beer 40 gal
(ProductID;ProductDesc) 标头实际上不在文件中,因此请忽略它。 在另一个文件 POSSIBLEUNITS 中,我已经 - 你猜到了 - 可能的单位,以及它们的等价物:
u;u.;un;un.;unit
k;k.;kg;kg.,kilograms
这是我使用正则表达式的第一天,我想知道如何获取 SALESORDERLIST 中的条目,其单位出现在 POSSIBLEUNITS 中。在我的示例中,我想排除条目 4,因为 'gal' 未在 POSSIBLEUNITS 文件中列出。
我说的是正则表达式,因为我还有一个需要匹配的标准:
egrep "^[0-9]+;{1}[^; ][a-zA-Z ]+" SALESORDERLIST
从这些结果条目中,我想得到那些以有效单位结尾的条目。
谢谢!
【问题讨论】:
-
你可能应该看看像
awk和grep这样的工具来实现你想要的,一个正则表达式本身,不解析文件,它解析字符串。 正则表达式是用于描述搜索模式的特殊文本字符串。 regexbuddy.com/regex.html -
@Tuga 不过,它可以在 bash 中完成。
-
@ooga 据我所知
awk和grep在 bash 中运行,但 OP 仅使用正则表达式无法达到预期结果。 -
@iL_Marto 不要在这里发帖,更新你的问题。
-
@Tuga 当然,它们“在 bash 中运行”(嗯,不完全是 in bash,但它们可以在 from bash 中运行)。我只是说它可以用 bash 本身来完成,因为 bash 可以从文件中读取行并且可以将子表达式与简单的正则表达式匹配。我并不是说这是最好的方法,但这是一个有趣的练习。