繁体   English   中英

如何使用Bash命令在Java变量中查找和替换文件

[英]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"

但是,这有两个问题

  1. 我真的不想在终端中引用“ www.yahoo.com”,因为该URL一直都在变化,所以我想使用一些正则表达式在“ server:”之后捕获此URL。

  2. 如何在终端中引用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM