【问题标题】:Replace js path using unix sed使用 unix sed 替换 js 路径
【发布时间】:2022-02-17 01:51:11
【问题描述】:

大家晚上好。 我正在尝试使用 unix sed 脚本替换 *.js 文件的路径。所以,我写了正确的正则表达式并且 sed 没有落下,但我无法得到正确的结果。

UPD:我使用的是 macOS

传入字符串:import * as module from "/test"

我的正则表达式:

 \s\*import(.+)from\s+\['\\"\](\\/.+)[^\n]+

找到路径模式并返回我需要的两个组(* as module/test.js

比如我需要把import \* as module from "/test"改成import \* as module from "/myFolder/test.js"

所以,但是我的 bash 命令

echo 'import * as module from "/test.js"' |
sed -r "s:\s*import(.+)from\s+['\"](\/.+)[^\n]+:import \1 from \"\/myFolder\2\":g "

返回原始字符串!请问有什么问题吗?

【问题讨论】:

    标签: regex bash unix sed


    【解决方案1】:

    使用gnu-sed

    s='import * as module from "/test.js"'
    sed -E "s~\\b(import.+ from )(['\"])([^'\"]+)\2~\1\2/myFolder\3\2~g" <<< "$s"
    
    import * as module from "/myFolder/test.js"
    

    正则表达式解释:

    • \\b: 匹配一个单词边界
    • (import.+ from ):匹配字符串,从单词 import 开始,后跟任意字符的 1+,然后是单词 from,两边用空格括起来
    • (['\"]):匹配'" 作为开场白,并在组#2 中捕获
    • ([^'\"]+):匹配 1+ 的任何不是引号的字符并在组 #3 中捕获
    • \2: 匹配与开头引用相同的引用

    在 OSX 上使用 sed:

    sed -E "s~(import.+ from )(['\"])([^'\"]+)~\1\2/myFolder\3~g" <<< "$s"
    

    【讨论】:

    • 在 macOS 上好像不行……
    • 你是在 OSX 上试试吗?你的问题有 sed -r 用于 gnu awk
    • OSX 的更新答案
    【解决方案2】:

    使用您展示的示例,请尝试遵循awk 代码。用 GNU awk 编写和测试。

    s='import * as module from "/test.js"'
    echo "$s" | awk '/^import.*from[[:space:]]+"\//{sub(/\//,"/myFolder&")} 1'
    

    说明:以下是上述代码的详细说明。

    • 创建一个名为s 的变量,其中包含awk 程序的所有值作为输入。
    • 通过echo 命令打印并将其作为标准输入传递给awk 程序。
    • awk 程序检查条件中,如果一行满足^import.*from[[:space:]]+"\/ 正则表达式(它基本上检查行是否从导入开始直到从后跟空格,然后是“/),如果这是真的,那么将发生以下操作。
    • 使用awksub 函数执行替换以根据要求将/ 替换为/myFolder/
    • 然后提到1 是在awk 中打印当前行的一种方式。

    【讨论】:

      【解决方案3】:

      使用sed

      $ sed 's|/[^"]*|/myFolder&|' input_file
       import * as module from "/myFolder/test.js"
      

      【讨论】:

        猜你喜欢
        • 2011-01-24
        • 1970-01-01
        • 2018-01-02
        • 2012-01-11
        • 1970-01-01
        • 2017-12-17
        • 1970-01-01
        • 1970-01-01
        • 2012-08-17
        相关资源
        最近更新 更多