Команда sed не обновляет текстовый файл

Хотел бы спросить, потому что у меня проблема с командой sed в сценариях Unix.

#!/bin/sh
cnt=2
sed '1 c\
$cnt' test.txt

Я хочу заменить первую строку текстового файла test.txt значением переменной cnt, которое равно 2. Как я могу передать переменную в приведенной выше команде sed? Команда sed обрабатывает $cnt как строку.


person user3051523    schedule 16.02.2015    source источник


Ответы (2)


Переменные не раскрываются в одинарных кавычках. Однако они раскрываются в двойных кавычках.

sed "1 c\\
$cnt" test.txt

Обратите внимание, что sed не обновляет входной файл по умолчанию, вместо этого выводит измененную версию. Если ваша реализация sed поддерживает это, используйте переключатель -i для изменения входного файла. В противном случае вам придется перенаправить вывод в новый файл и переименовать его обратно в исходное имя:

sed "..." text.txt > text.new
mv text.new text.txt
person choroba    schedule 16.02.2015
comment
У меня ошибка: sed: Функция 1 c2 не может быть проанализирована. - person user3051523; 16.02.2015
comment
@ user3051523: Извините, вам нужно избежать обратной косой черты. Проверьте обновление. - person choroba; 16.02.2015
comment
Это сработало, но test.txt не обновился. - person user3051523; 16.02.2015
comment
@ user3051523: Вы прочитали весь ответ? - person choroba; 16.02.2015
comment
в любом случае спасибо, я думаю, мне следует использовать -i, как вы упомянули .. - person user3051523; 16.02.2015

Изменить на:

#!/bin/sh
cnt=2
sed "1 c\
$cnt" test.txt

Чтобы произошла интерполяция переменных, вам нужно поместить ее в двойные кавычки, а не в одинарные.

person Arjun Mathew Dan    schedule 16.02.2015
comment
У меня ошибка: sed: Функция 1 c2 не может быть проанализирована. Когда я попытался изменить его с одинарных на двойные кавычки... - person user3051523; 16.02.2015
comment
Я не получаю эту ошибку, попробуйте изменить ее на sed 1 c $cnt test.txt (в одну строку) - person Arjun Mathew Dan; 16.02.2015
comment
Я все еще получаю сообщение об ошибке, когда я изменил на: - person user3051523; 16.02.2015
comment
sed 1 c $cnt test.txt также пробовал: sed 1 c\ $cnt test.txt - person user3051523; 16.02.2015
comment
sed 1 c ${cnt} test.txt Я пробовал вышеописанное, но все еще получаю сообщение об ошибке. - person user3051523; 16.02.2015