在.gitconfig中转义反斜杠

在.gitconfig中转义反斜杠,git,escaping,git-config,Git,Escaping,Git Config,我试图在我的.gitconfig中设置一个过滤器,用另一个字符串(也包括反斜杠)替换包含反斜杠的字符串 clean = sed 's|foo|bar|g' smudge = sed 's|foo|bar|g' 只要foo和bar不包含任何\,这个例子就行了 我知道,我应该逃避\,但我就是不能让它正常工作。 有人能告诉我如何让它工作吗?一般来说,为了避免反斜杠,将它加倍。如果\x变为x,则\变为\。这种反斜杠解释“吃”反斜杠,但如果它们的前缀是反斜杠,则不吃 这将使它通过Git,shell在Gi

我试图在我的.gitconfig中设置一个过滤器,用另一个字符串(也包括反斜杠)替换包含反斜杠的字符串

clean = sed 's|foo|bar|g'
smudge = sed 's|foo|bar|g'
只要
foo
bar
不包含任何
\
,这个例子就行了

我知道,我应该逃避
\
,但我就是不能让它正常工作。
有人能告诉我如何让它工作吗?

一般来说,为了避免反斜杠,将它加倍。如果
\x
变为
x
,则
\
变为
\
。这种反斜杠解释“吃”反斜杠,但如果它们的前缀是反斜杠,则不吃

这将使它通过Git,shell在Git中吃掉它(将反斜杠后跟其他字符解释为特殊字符),因此如果将此命令馈送给shell,请再次将其加倍。现在,最终结果中的一个反斜杠由输入中的四个反斜杠表示

如果shell将其传递给像sed这样专门处理反斜杠的命令,请再次将其加倍。现在一个反斜杠是八


如果该命令将字符串传递给另一个执行反斜杠解释的命令,则需要再次将其加倍,以此类推。出于这个原因,我们在shell中有其他引用机制(以及其他语言):在单引号中,反斜杠不再是特殊的(不再被吃掉),因此您可以使用单引号将所需的反斜杠数量减半。(与Python中的“raw”字符串相比)但是,对于这种特殊情况,八个反斜杠可能并不比仔细的单引号和四个反斜杠差多少。

一般来说,要避开反斜杠,请将其加倍。如果
\x
变为
x
,则
\
变为
\
。这种反斜杠解释“吃”反斜杠,但如果它们的前缀是反斜杠,则不吃

clean = sed 's|foo|bar|g'
smudge = sed 's|foo|bar|g'
这将使它通过Git,shell在Git中吃掉它(将反斜杠后跟其他字符解释为特殊字符),因此如果将此命令馈送给shell,请再次将其加倍。现在,最终结果中的一个反斜杠由输入中的四个反斜杠表示

如果shell将其传递给像sed这样专门处理反斜杠的命令,请再次将其加倍。现在一个反斜杠是八


如果该命令将字符串传递给另一个执行反斜杠解释的命令,则需要再次将其加倍,以此类推。出于这个原因,我们在shell中有其他引用机制(以及其他语言):在单引号中,反斜杠不再是特殊的(不再被吃掉),因此您可以使用单引号将所需的反斜杠数量减半。(与Python中的“raw”字符串相比)对于这种特殊情况,八个反斜杠可能并不比仔细的单引号和四个反斜杠差多少。

这一彻底的解释起到了作用。非常感谢,我成功了!对于讨论的每一个案例,都可以用一个例子来加以改进。这种彻底的解释起到了作用。非常感谢,我成功了!这可以通过讨论的每个案例的一个示例加以改进。
clean = sed 's|foo|bar|g'
smudge = sed 's|foo|bar|g'