我想使用sed来替换一条路径不同的路径,
我有这个log4j文件:
# suppress inspection "UnusedProperty" for whole file
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
spark.log.path=/tmp/logs/spark
msg.layout=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%t] (%F:%L) : %m%n
现在我想将" spark.log.path =" 之后的路径更改为新路径, log4j文件总是在变化,所以我不想替换路径字符串,我想在匹配' spark.log.path =' 之后替换路径
我尝试过这个shell脚本,但它不起作用(例外):
origin_path='spark.log.path='
k8s_path='spark.log.path=/tmp/logs/spark/master'
sed -i 's/^'${origin_path}' .*$/'${k8s_path}'/' log4j.properties
任何人都可以看到我错过了什么吗?
答案 0 :(得分:1)
只需更改分隔符:
sed -i "s_^${origin_path}.*_${k8s_path}_" log4j.properties
您与日志路径存在冲突。
答案 1 :(得分:0)
尝试:
awk -v new_path="spark.log.path=/tmp/logs/spark/master" '{sub(/spark.log.path.*/,new_path);print}' Input_file > temp_file && mv temp_file Input_file
简单地将正则表达式spark.log.path。*替换为spark的新值,该值存在于awk的名为new_path的变量中,然后执行print。将所有行输出到temp_file中,一旦此命令成功完成,然后将temp_file重命名为Input_file。
PS:还有awk的版本也会对Input_file进行就地更新,上面的代码首先读取Input_file并进行更改解析并将预期输出转换为临时文件,然后将其重命名为相同INPUT_FILE。