【问题标题】:disable the escaping function of the backslash in sed禁用sed中反斜杠的转义功能
【发布时间】:2013-06-25 10:38:25
【问题描述】:

在 GNU sed(以及我所知道的几乎所有其他发行版)中:

SET VAR=C:\nyc
sed "s/PATH/%VAR%/g" file.txt

导致任何出现的 PATH 都被替换为新行,后跟“yc”。在我的情况下,VAR 始终是用户提供的文字(它是 Windows 路径)。如何禁用'\'的默认解释? (我知道一些技巧,比如将 VAR 保存在文件中,并将 VAR 中的所有“\”替换为“\\”,然后将其传递给 sed)

【问题讨论】:

  • 为什么不用双反斜杠替换所有反斜杠?
  • 是的,这完全有可能。问题是我有很多这样的变量,它们也用于“复制”命令,所以我需要为每个变量引入临时值和丑陋的东西。我只是想知道这在单个 sed 命令中是否可行。
  • 这个问题似乎是特定于 windows/shell 的,因为在我所知道的任何 shell 中都不会扩展 %VAR% ,并且扩展 "$VAR" 将导致 sed 省略 "C:nyc " 而不是换行符。

标签: windows sed cmd escaping pattern-matching


【解决方案1】:

您可以在 Windows 命令行中修改%var%

>类型文件 小路 小路 >set var=C:\nyc >sed "s/PATH/%VAR%/g" 文件 C: yc C: yc >设置 var=%var:\=\\% >回声%var% C:\\纽约 >sed "s/PATH/%VAR%/g" 文件 C:\纽约 C:\纽约

【讨论】:

  • 谢谢。这是一个有用的技巧,通过在 sed 中使用 %VAR:\=\\% 而不是 %VAR% 确实以某种方式解决了问题。虽然似乎没有任何方法可以直接在 sed 中执行此操作而无需这种魔法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-30
  • 1970-01-01
  • 2020-12-22
  • 1970-01-01
  • 2015-05-19
  • 2015-09-21
  • 2011-11-09
相关资源
最近更新 更多