大家晚上好。我试图使用unix脚本替换*.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 "返回原来的字符串!你能帮帮忙吗,它怎么了?
发布于 2022-02-16 17:19:42
使用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"RegEx解释:
\\b:匹配一个单词boundary(import.+ from ):匹配字符串,从单词import开始,在任何字符的1+后面跟着在sides(['\"]):上用空格包围的单词from匹配一个'或"作为开始引号,在组#2([^'\"]+):匹配中捕获任何非引号的字符,而在组#3\2:中捕获的字符匹配与开头引号相同的引号
在OSX上使用此sed
sed -E "s~(import.+ from )(['\"])([^'\"]+)~\1\2/myFolder\3~g" <<< "$s"发布于 2022-02-16 17:51:11
在显示的示例中,请尝试遵循awk代码。用GNU awk编写和测试。
s='import * as module from "/test.js"'
echo "$s" | awk '/^import.*from[[:space:]]+"\//{sub(/\//,"/myFolder&")} 1'解释:下面是对上述代码的详细说明:。
happen.
s的变量,该变量中的所有值都是awk程序的输入。
echo命令打印它并将其作为标准输入传递给awk程序。awk中的
<代码>H 114程序检查条件:如果一行满足^import.*from[[:space:]]+"\/ regex(基本上检查行是否从导入开始到空格后面接“/”),那么接下来的操作将执行sub函数,以替代awk。requirement.
/myFolder/的/是在awk.中打印当前行的一种方法
发布于 2022-02-16 17:20:48
使用sed
$ sed 's|/[^"]*|/myFolder&|' input_file
import * as module from "/myFolder/test.js"https://stackoverflow.com/questions/71146305
复制相似问题