正则表达式中的条件空格?

正则表达式中的条件空格?

使用 grep,如何在一个命令行中执行此操作?

到目前为止,我已经grep '\$[0-9][0-9]\.[0-9][0-9]' money.txt在文本文件中使用了各种字符串,但在满足某些条件时遇到了问题。

我试图搜索任何包含美元价值从 10.00 美元到 99.99 美元(美元符号+保留小数点后两位数字)的行,我的搜索会捕获所有内容,但这甚至包括您在其前后有文本的情况

例如abc$15.64,,abc$15.64xyz$15.64abc

我希望仅当之前(例如行尾)、之后(行首)、之前和之后(行中间)有空格或根本没有空格(例如行中只有字符串)时才捕获它们。

我尝试添加 \s,但它根本不打印任何内容(即使是像 这样的有效内容abc $15.64 xyz),但如果我将它们设为可选(使用 *),它们就可以正常打印。因此,我认为它完全忽略了 \s,因为它似乎不能满足任何要求。

注意:我只想将空格设为可选,因为当美元值位于行首或行末时,我也需要它来打印行,在这种情况下,它们前后不会有空格。即使我可以让 \s 工作,将其设为可选仍会匹配如下字符串abc$15.64xyz

知道如何做才能让它工作吗?

谢谢。

答案1

您只需指定正则表达式以行首或空格开头。 并以行尾或空格结尾。 我希望这就是你想要的。

egrep '(^| )\$[0-9][0-9]\.[0-9][0-9]($| )' money.txt

答案2

为了准确实现您的目标,即只收集 10.00 美元到 99.99 美元之间的金额,您可能需要修改 Sparkie 的完美答案,如下所示:

egrep '(^| )\$[1-9][0-9]\.[0-9][0-9]\($| )' money.txt

感谢 Sparkie 提供的egrep提示,我一直不明白如何在搜索中加入“或” grep,非常酷,已添加到我的工具包中。

相关内容