[英]How to find and replace inside a file with some Javascript variable using Bash command
我正在用Javascript编写一些代码,并且定义了几个称为
const url = "www.google.com"
const data = "xyz"
而且我还有一个文本文件,如下所示:
clusters:
- cluster:
server: www.yahoo.com
certificate-authority-data: abc
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: aws
name: aws
我要做的就是用我定义的变量替换“服务器”名称和“证书授权数据”,看起来像“
clusters:
- cluster:
server: www.google.com
certificate-authority-data: xyz
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: aws
name: aws
我读过要使用
sed -i "s%www.yahoo.com%www.google.com%g" "test.txt"
但是,这有两个问题
我真的不想在终端中引用“ www.yahoo.com”,因为该URL一直都在变化,所以我想使用一些正则表达式在“ server:”之后捕获此URL。
如何在终端中引用Javascript变量?
我真的被困在这里,有什么帮助
如果确实需要,有一种让nodejs执行bash命令的方法。 NodeJS Shell命令 。 在这种情况下,它可能看起来像这样:
const replaceUrl = "www.yahoo.com";
const url = "www.google.com";
const data = "xyz";
child_process.execSync('sed -i "s%' + replaceUrl + '%' + url + '%g" "test.txt"').toString();
我在这里使用了同步版本,因为它很方便,但是异步版本可以与回调一起使用。 该函数返回一个缓冲区,因此.toString()
可以理解任何数据,但在您的情况下不应有任何返回。
如果js文件是a
,文本文件是b
尝试两次,每次更换一对。 2行,然后在shell中输入,每行是将2个过程链接为1个
$ sed -En 's!^.*\burl\s*=\s*"([^"].+)"\s*!s/\\b(server:\\s*).+/\\1\1/i!;te;b;:e p;q' a |sed -i -Ef - b
$ sed -En 's!^.*\bdata\s*=\s*"([^"]+)"\s*!s/\\b(certificate-authority-data:\\s*).+/\\1\1/i!;te;b;:e p;q' a |sed -i -Ef - b
注意:首先通过在第二次使用-i
opt来测试它。 sed -i -E..
成为sed -E...
由一行gnu awk
awk 'FNR==NR {if(/(const\s)?url\s*=/) {u=gensub(/.*url.*"([^"]+)"/,"\\1",1)} else if(/(const\s)?data\s*=/) {v=gensub(/.*data.*"([^"]+)"/,"\\1",1)} next} {if(/server:/) print gensub(/(.*server:\s*).*/,"\\1"u,1); else if (/certificate\S+:/) print gensub(/(.*certificate-authority-data:\s*).*/,"\\1"v,1); else print }' a b
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.