【问题标题】:How to change a windows path to a linux path in all files under a directory using sed如何使用sed将目录下所有文件中的windows路径更改为linux路径
【发布时间】:2014-05-07 22:35:45
【问题描述】:

我将一个目录结构从 windows 机器复制到 Linux 机器,我想使用 sed 将这个目录下所有文件中的 c:\IBM\WebSphere 替换为 /opt/IBM/WebSphere

有什么想法吗?

【问题讨论】:

  • “复制目录结构”是什么意思?现在 Windows 机器上的所有文件都在 Linux 机器上吗?如果是这样,不是所有路径都已经以 Linux 方式构建了吗?
  • 都在 Linux 机器上,但有些文件的路径是硬编码的,所以我需要访问每个文件并将路径更改为新的 Linux 路径。

标签: linux replace sed


【解决方案1】:

我认为 sed 为此目的有点不方便,如果你想更改实际文件,你可以使用 perl one-liner

perl -pi -e 's/c:\\IBM\\/\/opt\/IBM\//g' *

根据您的需要添加或调整路径(如果您希望替换只更改这些目录,请添加 WebSphere)

【讨论】:

    【解决方案2】:

    由于sed 可以将任何字符作为分隔符,所以使用

    sed -e 's_\\_/_g'
    

    \ 替换为/

    sed -e 's_[Cc]:_/opt_g'
    

    /opt替换c:

    你可以把它们串起来:

    echo "C:\\IBM\\WebSphere" | sed -e 's_\\_/_g' -e 's_[Cc]:_/opt_g'
    

    输出:

    /opt/IBM/WebSphere
    

    【讨论】:

    • 我看到的唯一问题是有一些“\”需要保持原样,所以我无法运行 sed 将所有“\”替换为“/”。它必须是完整的“C:\IBM\WebSphere”
    • @user2292500:在这种情况下,您需要更新您的问题,解释 a)一些需要保持不变的事实和 b)给人们标准来区分需要保持的 \ 和一个那需要去。
    • 它永远不会是C:\IBM\WebSphere 吗?如果没有,sed -e 's_[Cc]:\\IBM\\WebSphere_/opt/IBM/WebSphere_' 会这样做。如果它是 C:\[path1]\[path2] 并且您需要替换输出中的 path1path2 中的任何内容,那么您需要这样指定。
    【解决方案3】:

    我没有看到 awk 解决方案,只需添加一个:

    awk -F'\' -v OFS='/' '$1=/^c:/?"/opt":$1'
    

    测试:

    kent$  awk -F'\' -v OFS='/' '$1=/^c:/?"/opt":$1' <<<'c:\IBM\WebSphere'  
    /opt/IBM/WebSphere
    

    【讨论】:

      【解决方案4】:

      echo "C:\Users\San.Tan\My Folder\project1" | sed -e 's/C:\\/mnt\/c\//;s/\\/\//g'

      替换

      C:\Users\San.Tan\My Folder\project1

      mnt/c/Users/San.Tan/My Folder/project1

      如果有人需要将 Windows 路径替换为 Windows Subsystem for Linux(WSL) 路径

      【讨论】:

        猜你喜欢
        • 2017-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-05
        • 2012-01-25
        相关资源
        最近更新 更多