Mas*_*son 5 regex linux shell dash-shell
我正在尝试编写一个 shell 脚本,在其中我必须查找字符串中是否存在-32 。不幸的是,我必须在不使用任何 bashism 的情况下执行此操作,因为它必须在运行 Dash 的计算机上运行。
我尝试过case ${1+"$@"} in *-32*);;,但这会得到类似-321的东西。有没有办法使用正则表达式或其他东西来查找该标志?它周围可以有其他标志,并在字符串中用空格分隔。
我认为我需要的正则表达式会查找 -32 ,后面带有空格或行尾。-32(\s|$)
我对正则表达式很陌生,所以我不确定这是否是最好的方法。任何帮助,将不胜感激!
谢谢!
您可以grep与单词边界一起使用:
grep -E '-32\\b' FILE\nRun Code Online (Sandbox Code Playgroud)\n\n\\b“单词边界”处的匹配 = 字母数字字符和非字母数字字符之间的位置。
在默认语言环境中,“字母数字字符”(如上面使用的术语)表示与字符类匹配的任何字符[a-zA-Z0-9_](即任何数字、任何字母 A\xe2\x80\x93Z 和下划线)。
以类似的方式\\B匹配任何没有单词边界的地方(即,其两侧的字符具有相同类型的任何位置,要么都是字母数字字符,要么都是非字母数字字符)。
因此,如果您想确保减号前面也必须有一个非字母数字字符(例如空格),您可以编写以下内容:
\n\ngrep -E '\\B-32\\b' FILE\nRun Code Online (Sandbox Code Playgroud)\n\n这将匹配xx -32 xx(减号前有一个空格),但不匹配 xx-32 xx(没有空格)。由于空格和减号都是非字母数字,因此\\B它们之间会匹配,但\\b不会匹配。
如果您想确保减号前面有字母数字字符,则可以编写以下内容:
\n\ngrep -E '\\b-32\\b' FILE\nRun Code Online (Sandbox Code Playgroud)\n\n例如x-32 x(不带空格)匹配,但不匹配x -32 x(减号前有空格)。