У меня есть файл, который имеет содержание в следующем формате:
wwid 525a9370dcb2348b03884049000190l
2-е поле отличается на каждой строке, я должен заменить 64 из этих строк с 64 новыми различными строками.
У меня есть этот сценарий - и он действительно изменяет 2-е поле - однако, он изменяет 1-ю подобранную строку правильно - но оставляет остающиеся строки без изменений - это продолжает делать это, пока он не читает конец файла. Таким образом, это похоже на проблему цикла.
Какие-либо идеи? Вот сценарий:
while read line
do sed -e "0,/wwid/ s/wwid .*$/wwid "${line}"/" oldluns
done < newluns
Ваш sed подход цикла только собирается работать, если текст замены не соответствует исходному шаблону (иначе 0,/wwid/
движение должно соответствовать экземпляру, который Вы уже заменили). Например, Вы могли сделать
while read line
do sed -i -e "0,/wwid/ s/wwid .*$/WWID "${line}"/" oldluns
done < newluns
и затем выполните последующую обработку результат с другим sed для изменения WWID
назад к wwid
. Очевидно, необходимо выбрать строку, которой это не найдено в другом месте в файле.
(NB, к сожалению, это не может быть протестировано без -i
, по той же причине - удостоверяются, что у Вас есть подходящие резервные копии oldluns
файл.)
Лучший путь мог бы состоять в том, чтобы использовать awk
например.
awk -vnewluns="newluns" '$1 == "wwid" {getline $2 < newluns} 1' oldluns