gpt4 book ai didi

linux - 在同一个文件上重复使用 sed

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

下面是我用来替换 nagios.cfg 中 200 多个字符串的 shell 脚本。

我希望 sed 替换同一文件中的所有 200 个字符串,但它会将内容复制 200 次,每次都有一个更改。

    #set -x
cat partthree | while read LINE
do hostnam=`echo $LINE | awk '{print $1}'`
echo $hostnam
a=`less hosts | grep $hostnam -A5 | grep -i md5sum | awk '{print $2}'`
b=`less partthree | grep $hostnam | awk '{print $2}'`
echo $a
echo $b
sed "s/$a/$b/g" hosts >> sample
# sed "s/$a/$b/g" hosts > sample will change only last occurence
done

尝试直接使用 sed -i "s/$a/$b/g"hosts

@预期输出:

define host {
address sampleaddress
alias samplealaias
host_name samplealhostname
_md5sum def(with replaced string)

}

输出

define host {
address sampleaddress
alias samplealaias
host_name samplealaias
c8h(origanal string) def(string that is supposed to replace original c8h value)

}

最佳答案

下面的脚本应该可以完成这项工作。它从初始的 hosts 文件开始,一个接一个地执行单独的替换。与原始脚本的主要区别在于替换结果不会附加到结果文件,而是就地应用 (sed -i) 在结果文件上。

# start with 'sample' = 'hosts'
cp hosts sample

# perform replacements one after another in 'sample'
cat partthree | while read LINE ; do
hostnam=`echo $LINE | awk '{print $1}'`
a=`less hosts | grep $hostnam -A5 | grep -i md5sum | awk '{print $2}'`
b=`less partthree | grep $hostnam | awk '{print $2}'`
# modify 'sample' in-place
sed -i "s/$a/$b/g" sample
done

关于linux - 在同一个文件上重复使用 sed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49362689/

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