2013-05-30 2 views
0

У меня есть файл test.txt с линией 3заменить строку с помощью Баш

start day = 29, 

номер дня, 29, должен обновляться ежедневно. Какой самый простой способ сделать это?

Я попытался

line3=" start day = $(date +"%d")," 

sed -i "3c $line3" test.txt 

Единственная проблема заключается в том, что первое место до «запуска» не отображается. результат

start day = 29 

вместо

start day = 29, 
+2

Почему вы задаете тот же вопрос на расстоянии 30 минут? – Barmar

ответ

1

Вы должны будете бежать первоначальное место.

sed -i~ "3c\ start day = $(date +%d)," test.txt 

должно работать.

(Обратите внимание, что это имеет довольно мало общего с Баш, и все, что делать с вашими sed.)

0

Прежде всего, расширения переменной происходит до c выполнения команды, так что вы на самом деле работает СЭД как этот

sed -i "3c start..." test.txt 

Обратный слэш где-то после того, как c вероятно, знаменует начало текста замены, так что любой пробел после \ является не игнорируется. В отсутствие обратной косой черты, я думаю, sed берет первый непустой символ как начало заменяющего текста, поэтому любые пробелы перед этим игнорируются.

Таким образом, sreservoir's answer - это один из способов его решения.

В качестве альтернативы, поскольку вы просто обновляете даты, вы можете просто заменить цифры (а не целую строку), чтобы не беспокоиться о повторении других частей линии.

sed -i "3s/[0-9][0-9]\?/$(date +%d)/" test.txt 
Смежные вопросы