замените 64 различных СТАРЫХ строки 64 различными новыми строками

У меня есть файл, который имеет содержание в следующем формате:

wwid 525a9370dcb2348b03884049000190l

2-е поле отличается на каждой строке, я должен заменить 64 из этих строк с 64 новыми различными строками.

У меня есть этот сценарий - и он действительно изменяет 2-е поле - однако, он изменяет 1-ю подобранную строку правильно - но оставляет остающиеся строки без изменений - это продолжает делать это, пока он не читает конец файла. Таким образом, это похоже на проблему цикла.

Какие-либо идеи? Вот сценарий:

while read line
    do sed  -e "0,/wwid/ s/wwid .*$/wwid "${line}"/" oldluns
done < newluns
0
задан 4 October 2019 в 14:56

1 ответ

Ваш 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
0
ответ дан 22 December 2019 в 00:25

Другие вопросы по тегам:

Похожие вопросы: