一部のinputrc文字列をgrepできません。

一部のinputrc文字列をgrepできません。

bind -p |grep -E "\\e.\":"働く

しかし、

bind -p |grep -E "\\e\\C-.\":"動作しない

いくつかの組み合わせを試しましたが、

答え1

正規表現で二重引用符で囲まれた文字列を使用しているため、一致させたい各リテラルバックスラッシュのエスケープをエスケープするには、追加のバックスラッシュを追加する必要があります。これは、シェルが二重引用符で囲まれた文字列のバックスラッシュを解釈するためです。

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

-E(あなたの正規表現が拡張正規表現ではないので、これは必要ありません。)

または、単一引用符を使用してこれを実行することをお勧めします。

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

シェルは元のコマンドライン引数をの"\\e\\C-.\":"よう\e\C-.":な正規表現として解釈しますeC.-":

元の式文字列は"\\e.\":"正規表現に対応するため、「有効」ですe.":。ただし、以前のリテラルバックスラッシュと一致しようとはしませんe


[\]代替表現を使用した代替表現\\:

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

または、リテラル文字列をgrepするには、withを使用して\e\C-正規表現の代わりに「固定文字列」としてパターンを使用するようにします。grep-F

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

関連情報