2015-02-16 3 views
0

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

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

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

ответ

2

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

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

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

sed "..." text.txt > text.new 
mv text.new text.txt 
+0

У меня есть ошибка: «sed: Функция 1 c2 не может быть разобрана». – user3051523

+0

@ user3051523: Извините, вам нужно избежать обратной косой черты. Проверьте обновление. – choroba

+0

Работало, но test.txt не обновлялся. – user3051523

1

Изменить на:

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

Для переменной интерполяции произойдет, и нужно положить его в двойные кавычки, а не одиночные кавычки.

+0

Я получил сообщение об ошибке: «SED: Функция 1 c2 не может быть разобран.» Когда я попытался изменить его с одного на двойные кавычки ... – user3051523

+0

Я не получаю эту ошибку, попробуйте изменить ее на sed «1 c $ cnt» test.txt (в одной строке) –

+0

Я все еще получаю ошибку, когда я изменил: – user3051523

Смежные вопросы