regex - 在没有 Bashisms 的情况下检查 Shell 中的子字符串

标签 regex linux shell dash-shell

我正在尝试编写一个 shell 脚本,我必须在其中查找字符串中是否存在 -32。不幸的是,我必须在不使用任何 bashisms 的情况下完成它,因为它必须在运行 Dash 的计算机上运行。

我试过 case ${1+"$@"} in *-32*);; 但那会得到类似 -321 的东西。有没有办法使用正则表达式或其他东西来查找那个标志?它周围可以有其他标志,由字符串中的空格分隔。

我认为我需要的正则表达式在 -32 之后查找空格或行尾。 -32(\s|$)

我对正则表达式很陌生,所以我不确定这是否是最好的方法。任何帮助将不胜感激!

谢谢!

最佳答案

您可以使用带有单词边界的 grep:

grep -E '-32\b' FILE

\b 匹配“单词边界”= 字母数字字符和非字母数字字符之间的位置。

在默认语言环境中,“字母数字字符”(如上所用术语)表示与字符类 [a-zA-Z0-9_] 匹配的任何字符(即任何数字,任何字母 A–Z 和下划线)。

以类似的方式,\B 匹配任何不是 单词边界的地方(即它两边的字符属于同一类型的任何位置,或者都是字母数字字符,或都是非字母数字字符)。

因此,如果您想确保减号前面也必须有一个非字母数字字符(例如空格),您可以编写以下内容:

grep -E '\B-32\b' FILE

这将匹配 xx -32 xx(减号前有一个空格)但 xx-32 xx(没有空格) .由于空格和减号都是非字母数字 \B 将在它们之间匹配,但 \b 不会。

如果您想确保减号前面有一个字母数字字符,您可以编写以下内容:

grep -E '\b-32\b' FILE

匹配例如x-32 x(没有空格),但不是 x -32 x(减号前有空格)。

关于regex - 在没有 Bashisms 的情况下检查 Shell 中的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24615835/

相关文章:

javascript - 如何使用正则表达式可以为空?

c# - 使用正则表达式查找 block 内的文本

python - 无法在终端 "bash:/etc/odbcinst.ini: Permission denied"中回显

regex - 用于Google Analytics(分析)中动态目标页面的正则表达式

regex - Powershell,按正则表达式匹配计数对集合进行排序

linux - 使用 grep 获取运行缓慢的 sql

linux - 更新库 : Boost on Debian 7

c - Linux 中的页表遍历

linux - 将输出保存到文件而不是嵌套脚本的屏幕

java - 在 Linux 中从 java 执行 shell 脚本(使用 perl 和其他 shell 脚本的 shell 脚本)