【问题标题】:Why does backslash '\' work so differently in linux?为什么反斜杠'\'在linux中的工作方式如此不同?
【发布时间】:2013-02-10 20:52:45
【问题描述】:

当我像这样在反斜杠周围加上单引号时

回显'\'

它打印反斜杠,它不关心转义。

但是当我像这样在 sed 中使用相同的东西时

sed 's/\/a/g' : 尝试用 a 替换反斜杠

或者在 grep 的情况下

echo '\\//' |grep '\',它不起作用,它也需要转义。

为什么这个反斜杠需要转义?我的意思是所有这些都失去了意义对吧?

【问题讨论】:

  • 回复你的sed 命令:你的意思是正斜杠,为了让替换工作,你需要确保你有三个分隔符:sed 's/\//a/g' file。请注意,您可以使用other characters as delimiters,例如:sed 's%/%a%g' file。 HTH。

标签: linux sed


【解决方案1】:

反斜杠的问题在于它具有许多特殊含义,适用于多种工具和多种上下文。

在单引号内,它对您的 shell 失去了特殊含义(请学会在相关或不确定时用其名称标记您的问题),但它对 @987654321 保留特殊含义@(对于正则表达式语法是特殊的,所以对于sedgrep应该是这样)

通常你可以转义一个反斜杠而不是引用它。它不一定使事物可读,但在某些情况下,它可以。这就是我如何在不带引号的情况下 grep 文字 \

grep \\\\

Shell 将\\\\ 变成\\,而正则表达式中的\\ 表示文字\

【讨论】:

  • 哇,我刚刚注意到 grep '\\' 和 grep \\\\ 是一样的,超级混乱:(
猜你喜欢
  • 2016-03-12
  • 1970-01-01
  • 2021-11-16
  • 2011-01-23
  • 2019-01-28
  • 2012-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多