gpt4 book ai didi

linux - 如何在 shell 脚本中使用迭代值(多行)查找和替换字符串

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:42:51 25 4
gpt4 key购买 nike

这是我用来替换字符串的shell脚本

OPTIONS="-p ${PIDFILE}"

多行字符串值

OPTIONS_1234="-p ${PIDFILE_1234} -ORBEndpoint iiop://localhost:1234" OPTIONS_1235="-p ${PIDFILE_1235} -ORBEndpoint iiop://localhost:1235" OPTIONS_1236="-p ${PIDFILE_1236} -ORBEndpoint iiop://localhost:1236"

根据我的输入端口号,应该创建许多选项。

#!/bin/bash    
NS_HOSTNAME= localhost
namingService_ports = 1234,1235,1236
IFS=','
read -r -a portArray <<< "$namingService_ports"

for port in ${portArray[@]}; do
sed '0,/\PTIONS="-p ${PIDFILE}"/ s//\OPTIONS_'"$port"'="-p ${PIDFILE_'"$port"'} -ORBEndpoint iiop:\/\/'"$NS_HOSTNAME"':'"$port"'"\n /' "/etc/init.d/tao" > "tao_ns1"
done

有人可以建议我 sed 命令如何使用 for 循环获取多行并移动到文件“tao_ns1”吗

最佳答案

您的脚本基本上有 3 个问题。

  1. 作业 namingService_ports = 1234,1235,1236bash 中不正确它应该没有空格,即 namingService_ports="1234,1235,1236"
  2. 第一个 sed 有一个打印错误OPTIONS 的选项即 sed '0,/\PTIONS="-p ${PIDFILE}"应该是 sed '0,/\OPTIONS="-p ${PIDFILE}"
  3. 同时写入文件 "tao_ns1"你正在使用 >每次运行时基本上都会覆盖文件的操作符。应该是 >> append 运算符,它为循环的每次迭代将新行附加到文件。

还有 http://www.shellcheck.net/ ,您的脚本中有回车符,请运行 tr在继续下一步之前对其发出命令。

tr -d '\r' < current_script.sh > new_script.sh

通过上述修复。

#!/bin/bash

NS_HOSTNAME="localhost"
namingService_ports="1234,1235,1236"
IFS=','
read -r -a portArray <<< "$namingService_ports"

for port in ${portArray[@]}; do
sed '0,/\OPTIONS="-p ${PIDFILE}"/ s//\OPTIONS_'"$port"'="-p ${PIDFILE_'"$port"'} -ORBEndpoint iiop:\/\/'"$NS_HOSTNAME"':'"$port"'"\n /' "/etc/init.d/tao" >> "tao_ns1"
done

应该可以正常工作。

关于linux - 如何在 shell 脚本中使用迭代值(多行)查找和替换字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40801466/

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