У меня есть файл template.jou который имеет следующий формат:

/codeline1
/codeline2
/var = var
/codeline3

Теперь я хочу заменить часть var другими значениями, такими как A , B и C а затем записать содержимое template.jou с замененным значением в новый файл.

Я попробовал следующее:

sed -n 's/var/A/gpw A.jou' template.jou

Но это только напечатало строку, соответствующую шаблону (т.е. /var = A), в новый файл A.jou где я хочу получить полный файл, например так:

/codeline1
/codeline2
/var = A
/codeline3

Я также попробовал:

sed -i '.bak' 's/var/A/g' template.jou

Это заменило файл template.jou новым содержимым, но я также хочу изменить имя файла так, чтобы новый файл назывался A.jou .

1 ответ1

1

Вы, вероятно, просто хотите перенаправить вывод sed в другой файл:

sed 's/= var/= A/g' template.jou > A.jou

Убедитесь, что вы заменили только присваивание, например, путем сопоставления = только = var .


Обратите внимание, что 's/var/A/gp не даст желаемого результата, поскольку var будет заменен глобально, и замена будет напечатана снова. Вы получите этот вывод вместо:

/codeline1
/codeline2
/A = A
/A = A
/codeline3

Кроме того, модификатор w выводит только измененную часть в указанный после нее файл, что означает, что ваш A.jou будет содержать только /var = A и ничего больше. Вот почему вы должны перенаправить весь вывод sed в другой файл.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .