使用 unix sed 替换 js 路径

Replace js path using unix sed

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

UPD: 我正在使用 macOS

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

我的正则表达式:

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

找到路径模式和 returns 我需要的两个组(* 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  from \"\/myFolder\":g "

returns原来的字符串!请问有什么问题吗?

使用gnu-sed:

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

import * as module from "/myFolder/test.js"

正则表达式解释:

  • \b:匹配一个单词边界
  • (import.+ from ):匹配以单词import开始的字符串,后跟任何字符的1+,后面跟着单词from,两边用space包围
  • (['\"]):匹配 '" 作为开场引号并在组 #2
  • 中捕获
  • ([^'\"]+):匹配 1+ 个不是引号的字符并捕获到组 #3
  • </code>: 匹配与开头引号相同的引号</li> </ul> <hr /> <p>在 OSX 上使用此 <code>sed:

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

使用sed

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

使用您显示的示例,请尝试以下 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:]]+"\/ 正则表达式(基本上检查行是否从 import 开始直到 from 后跟 space(s) 后跟“/”如果这是 TRUE,那么将执行以下操作。
  • 使用 awksub 函数执行替换,根据要求用 /myFolder/ 替换 /
  • 然后提到 1 是一种在 awk.
  • 中打印当前行的方法