使用SED替换Shell脚本中的值



我的外壳脚本看起来像这样:

FAILED_REQUEST_DIRECTORY=/bla/bla2 java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1234  -jar /xyz/abc-service-1.0-SNAPSHOT.jar --server.port=1111 --server.address=127.0.0.1 --kafka.bootstrap.servers=10.111.11.11:3197,10.112.12.111:3197,10.123.44.25:3197 --topic.pushcrew.encryptionKey=abc-def-egh --spring.application.name=name-sevice  --fb.verification.token=token --management.trace.include.payload=true --topic.pushcrew.hits=activity-logs --max.block.ms=1000 --pager.duty.api.key=apikey --dsn=dsn

如果我必须替换命令中的键值,则ex:用变量将键--server.address的值替换为shell脚本的值,我该怎么做?

我知道,如果我必须替换key -server.address的值:

sed -i "s#--server.address=.* #$SERVER_ADDRESS#g;

但是,我如何维护替换后必须在那里的空间,以及如何确保仅在 =(等于)和(space)替换之前,才能确保该部分int int the键。

您可以使用此^(.*--server.address=)与2个捕获组和背部引用:

val='10.0.0.1'
sed -E "s/^(.*--server.address=)[^[:blank:]]+(.*)$/1$val2/" file.properties

详细信息:

REGEX:

  • --server.address=:匹配启动时的所有内容,直到[^[:blank:]]*子字符串并在组#1中捕获
  • (.*)$:匹配0或更多非空间字符
  • 1:匹配所有内容,直到结束并在组#2中捕获

替换:

  • $val:捕获组的反向引用#1
  • $val:替换中所需的FAILED_REQUEST_DIRECTORY=/bla/bla2 java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1234 -jar /xyz/abc-service-1.0-SNAPSHOT.jar --server.port=1111 --server.address=10.0.0.1 --kafka.bootstrap.servers=10.111.11.11:3197,10.112.12.111:3197,10.123.44.25:3197 --topic.pushcrew.encryptionKey=abc-def-egh --spring.application.name=name-sevice --fb.verification.token=token --management.trace.include.payload=true --topic.pushcrew.hits=activity-logs --max.block.ms=1000 --pager.duty.api.key=apikey --dsn=dsn
  • ` 2:捕获组#2
  • 的背面引用

awk

如果您可以使用> temp_file && mv temp_file Input_file,请尝试以下内容。(要将输出保存到Input_file本身中,请将CC_14附加到以下代码)

val='10.0.0.1'
awk -v var="$val" '
match($0,/--server.address=[0-9]+.[0-9]+.[0-9]+.[0-9]+/){
  val=substr($0,RSTART,RLENGTH)
  sub(/=.*/,"="var,val)
  print substr($0,1,RSTART-1) val substr($0,RSTART+RLENGTH)
  next
}
1
'   Input_file

输出将如下。

FAILED_REQUEST_DIRECTORY=/bla/bla2 java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1234  -jar /xyz/abc-service-1.0-SNAPSHOT.jar --server.port=1111 --server.address=10.0.0.1 --kafka.bootstrap.servers=10.111.11.11:3197,10.112.12.111:3197,10.123.44.25:3197 --topic.pushcrew.encryptionKey=abc-def-egh --spring.application.name=name-sevice  --fb.verification.token=token --management.trace.include.payload=true --topic.pushcrew.hits=activity-logs --max.block.ms=1000 --pager.duty.api.key=apikey --dsn=dsn

最新更新