我有一个文件,其内容格式如下:
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