Использование переменной внутри команды `sed`

Я использую эту команду, чтобы скопировать определенную строку из одного файла в другой. Она работает нормально. Никаких проблем с ней.

sed -f <(sed -e '1,10d; 12,$d; x; s/.*/10a\/;p; x' ../log/file2.txt ) ../log/file4.txt > ../log/file5.txt

Проблема вместо 10, я хочу использовать переменную VAR1 (где var1 = 10). $ VAR1 не работает.

Я попробовал эту команду:

sed -f <(sed -e '1,$VAR1d; 12,$d; x; s/.*/10a\/;p; x' ../log/file2.txt ) ../log/file4.txt > ../log/file5.txt

Пожалуйста, помогите мне.

6
задан 30 September 2013 в 14:36

2 ответа

Вы должны использовать фигурные скобки вокруг имени переменной:

sed -f <(sed -e '1,${VAR1}d; 12,$d; x; s/.*/10a/;p; x' ../log/file2.txt ) ../log/file4.txt > ../log/file5.txt

Таким образом, $ будет оценивать VAR1 вместо VAR1d.

0
ответ дан 30 September 2013 в 14:36

Оболочка не раскрывает переменные внутри одинарных кавычек. Вам нужно использовать двойные кавычки. Кроме того, как говорит Данатела, в этом случае вам также нужны фигурные скобки. Поскольку после этого оболочка попытается расширить $d, вам нужно экранировать $.

sed -f <(sed -e "1,${VAR1}d; 12,\$d; x; s/.*/10a\/;p; x" ../log/file2.txt ) ../log/file4.txt > ../log/file5.txt

Я не уверен, есть ли другие части в кавычках, которые также нужно будет экранировать, так как теперь вы используете двойные кавычки (например, *?), Так что вы всегда можете вместо этого переключаться между двойными и одинарными кавычками, использование первого только в случае необходимости.

sed -f <(sed -e '1,'"${VAR1}"'d; 12,$d; x; s/.*/10a\/;p; x' ../log/file2.txt ) ../log/file4.txt > ../log/file5.txt
0
ответ дан 30 September 2013 в 14:36

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

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