我无法 grep 一些 inputrc 字符串

我无法 grep 一些 inputrc 字符串

bind -p |grep -E "\\e.\":"工作

bind -p |grep -E "\\e\\C-.\":"不工作

我尝试了很多组合

答案1

由于您在正则表达式中使用双引号字符串,因此必须添加一个额外的反斜杠来转义要匹配的每个文字反斜杠的转义。这是因为 shell 会解释双引号字符串中的反斜杠。

bind -p | grep "\\\e.\":"
bind -p | grep "\\\e\\\C-.\":"

(请注意,这-E不是必需的,因为您的正则表达式不是扩展正则表达式。)

或者,我建议您这样做,使用单引号:

bind -p | grep '\\e.":'
bind -p | grep '\\e\\C-.":'

shell 会将您的原始命令行参数解释"\\e\\C-.\":"\e\C-.":,作为正则表达式,它与 相同eC.-":

您的原始表达式字符串"\\e.\":"“有效”,因为它对应于正则表达式e.":。然而,它不会尝试匹配 之前的文字反斜杠e


[\]使用代替的表达式的替代表述\\

bind -p | grep '[\]e.":'
bind -p | grep '[\]e[\]C-.":'

或者,如果您只想对文字字符串进行 grep \e\C-,请使用grepwith-F使其使用模式作为“固定字符串”而不是正则表达式:

bind -p | grep -F '\e\C-'

相关内容