我需要egrep一个在运行时之前未知的字符串,并且我将通过shell变量获取(如果重要的话,shell为bash)。问题是,该字符串将包含大括号,空格,点,斜杠等特殊字符。

如果我知道字符串,则可以一次转义特殊字符,但是如何对整个字符串进行转义呢?

通过sed脚本运行字符串以在每个特殊字符前加上\可能是一个主意,我仍然需要rtfm如何编写这样的脚本。我不知道是否还有其他更好的选择。

我确实读过re_format(7),但似乎没有诸如“将整个下一个字符串作为文字”之类的东西。

编辑:为避免误报,我还应该在模式中添加换行检测,例如。 egrep '^myunknownstring'

最佳答案

如果您需要将字符串嵌入到较大的表达式中,我将使用sed来实现。

s_esc="$(echo "$s" | sed 's/[^-A-Za-z0-9_]/\\&/g')" # backslash special characters
inv_ent="$(egrep "^item [0-9]+ desc $s_esc loc .+$" inventory_list)"

关于bash - 如何在正则表达式中转义以前未知的字符串?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5328995/

10-14 14:58
查看更多