用 64 个不同的新字符串替换 64 个不同的旧字符串

用 64 个不同的新字符串替换 64 个不同的旧字符串

我有一个文件,其内容格式如下:

wwid 525a9370dcb2348b03884049000190l

每行上的第二个字段都不同,我需要用 64 个新的不同字符串替换其中 64 行。

我有这个脚本 - 它确实更改了第二个字段 - 但是,它正确地更改了第一个匹配的行 - 但其余行保持不变 - 它会一直这样做,直到读取文件末尾。所以它看起来像一个循环问题。

有什么想法吗?以下是脚本:

while read line
    do sed  -e "0,/wwid/ s/wwid .*$/wwid "${line}"/" oldluns
done < newluns

答案1

您的 sed 循环方法仅在替换文本与原始模式不匹配时才有效(否则0,/wwid/将匹配您已经替换的实例)。例如,您可以这样做

while read line
    do sed -i -e "0,/wwid/ s/wwid .*$/WWID "${line}"/" oldluns
done < newluns

然后使用另一个 sed 对结果进行后处理以将WWID其改回wwid。显然,您应该选择在文件中其他地方找不到的字符串。

注意:不幸的是,如果没有就无法进行测试-i,出于同样的原因 - 确保您有该oldluns文件的适当备份。)

更好的方法可能是使用awk例如

awk -vnewluns="newluns" '$1 == "wwid" {getline $2 < newluns} 1' oldluns

相关内容