gpt4 book ai didi

linux - 搜索模式并替换同一行中 = 和 ""之后的内容

转载 作者:IT王子 更新时间:2023-10-29 00:56:40 27 4
gpt4 key购买 nike

我正在尝试用其他一些 IP 替换 10.10.10.10,这些 IP 在脚本执行期间作为参数传递,因此它应该更新我的文件中包含以下代码的代码。 (例如……)

$cat environment.ts
.....
.........
const WEB_URL = 'http://10.10.10.10';
const API_URL = 'http://20.20.20.20:8080';
.....
............
......
END OF File

如果它只是 IP 地址,那么我可以直接使用 sed 命令,如下所示,只需搜索 IP:10.10.10.10 并将其替换为一些 IP,例如 1.1.1.1

sed -i 's/10.10.10.10/1.1.1.1/g' environment.ts

但是,我无法中继 IP 地址,因为文件 "filename.ts" 可能经常更新不同的 IP。

所以我正在搜索模式 "WEB_URL" 并尝试在 '='"//" 之后替换新 IP。我尝试了 sedawk 但未能成功

预期结果:

需要像 sedawk 这样的命令来替换上面提到的文件 "environment.ts" 中的旧 IP,它应该用新 IP 替换旧 IP。 (如上所述,旧 IP 不是恒定的,它可能会有所不同,因此我使用的 sedawk 命令应该使用类似 WEB_URLAPI_URL 的模式进行搜索,并替换 '='http// 旁边的新 IP)

来自:

.....
const WEB_URL = 'http://<OLD_IP1>';
const API_URL = 'http://<OLD_IP2>:8080';
.....

收件人:

const WEB_URL = 'http://<NEW_IP1>';
const API_URL = 'http://<NEW_IP2>:8080';

最佳答案

sed 形式定位一个事件,然后使用备用定界符来避免必须转义 '/' 字符可以这样写:

sed '/locate/s#find#replace#'

但由于您希望能够将 IP 作为变量传递,因此需要双引号表达式以便进行变量扩展,我们将要使用 {x,y} 量词,因此我们需要 -r 选项来启用扩展正则表达式匹配,结果为:

sed -r "/locate/s#find#replace#"

在您的情况下,给定变量 ip 中提供的 IP 以及您希望找到 WEB_URLAPI_URL(后跟空格和'=' 符号),然后仅将 IP 地址替换为 $ip 中包含的 IP 地址,您可以使用:

sed -r "/(WEB|API)_URL\s=/s#[0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}#$ip#"

你在哪里

  • 定位/(WEB|API)_URL\s=/
  • 找到 IP 是 [0-9]{1,3}[.][0-9]{1,3}[.][0-9]{ 1,3}[.][0-9]{1,3}
  • 替换$ip

示例输入文件

示例文件显示 OTH_URLAPI_URL(后面没有空格和 '=')保持不变:

$ cat environment.ts
const OTH_URL = 'http://10.10.10.10';
const WEB_URL = 'http://10.10.10.10';
const API_URL = 'http://20.20.20.20:8080';
const API_URL (can either be 'http://10.10.10.10' or 'http://10.10.10.10:8080')

在上面的示例文件上运行 sed 表达式将导致:

$ ip=12.12.12.12
$ sed -r "/(WEB|API)_URL\s=/s#[0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}#$ip#" \
environment.ts
const OTH_URL = 'http://10.10.10.10';
const WEB_URL = 'http://12.12.12.12';
const API_URL = 'http://12.12.12.12:8080';
const API_URL (can either be 'http://10.10.10.10' or 'http://10.10.10.10:8080')

无论是 OTH_URL 行还是 API_URL 后跟空格和 '=' 的行都保持不变。

如果需要,您需要单独调用以将 WEB_URLAPI_URL 更改为不同的 IP 地址。这可以通过使用单独的 sed 表达式 -e 来完成,例如:

$ ip1=12.12.12.12
$ ip2=14.14.14.14
$ sed -r -e "/WEB_URL\s=/s#[0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}#$ip1#" \
-e "/API_URL\s=/s#[0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}#$ip2#" \
environment.ts
const OTH_URL = 'http://10.10.10.10';
const WEB_URL = 'http://12.12.12.12';
const API_URL = 'http://14.14.14.14:8080';
const API_URL (can either be 'http://10.10.10.10' or 'http://10.10.10.10:8080')

检查一下,如果您有任何问题,请告诉我。

关于linux - 搜索模式并替换同一行中 = 和 ""之后的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56917593/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com