【问题标题】:Replace all \\ with / in files and subdirs [duplicate]将文件和子目录中的所有 \\ 替换为 / [重复]
【发布时间】:2017-08-10 21:05:39
【问题描述】:

我需要一个快速命令(Linux 或 Windows)来将每个 \\ 替换为 /,所有使用 sed 的尝试都因 / 而失败。 (我已经尝试过find . -name '*.*' -exec sed -i 's/\\///g' {} \;,但我认为它因“/”而失败。

【问题讨论】:

  • 我的意思是\\,但它被替换了:(
  • 您在此处标记了 Python。我相信,如果您实际使用os 模块,那么在提供该平台上的相应路径时,应该都为您处理好。
  • 此外,无论您在做什么,都有多种解决方案可以通过多种不同的方式为您执行此操作。您是否尝试过所有解决方案?
  • 你能把你得到的错误贴出来吗?
  • 未转义的文字斜杠会出现sed 语法错误。

标签: linux bash


【解决方案1】:
find . -name '*.*' -type f -exec sed -i 's:\\\\:/:g' {} \;

您需要对每个反斜杠进行转义,并且在使用正斜杠进行替换时,通常建议使用冒号或逗号作为分隔符。但是,转义正斜杠也可以:

find . -name '*.*' -type f -exec sed -i 's/\\\\/\//g' {} \;

正如 cmets 中指出的,操作系统模块可能是您真正需要查看的内容。

编辑:感谢@tripleee 提醒我-type f 行,它将其限制为文件,而不是包括当前目录。

另外,我从 OP 中复制了 *.* 的语法,但总的来说它没有帮助。 * 通常是您想要的,因为不能保证文件的名称中有一个点。假设您很乐意包含不包含点的文件,那么这里最简单的做法是根本没有 -name

find . -type f -exec sed -i 's:\\\\:/:g' {} \;

【讨论】:

  • @tdelaney OP 不希望这样,他们在标题和评论中明确表示他们希望替换两个反斜杠,而不是一个。
  • @tdelaney 我引用 OP:I meant \\, but it was replaced :(
  • 好的,我知道了。我假设该评论指的是代码示例,并且当我到达这里时,OP 已经修复了它。
  • 我在尝试这个Cannot process . :That's not a normal file 时遇到错误(希望我翻译正确)
  • 您需要在find 命令行中,在-exec 之前添加一个-type f
猜你喜欢
  • 2015-04-01
  • 2012-05-13
  • 2019-05-01
  • 2017-05-01
  • 2020-08-29
  • 1970-01-01
  • 2012-10-06
  • 1970-01-01
  • 2015-06-27
相关资源
最近更新 更多