我需要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/