Я использую эту команду, чтобы скопировать определенную строку из одного файла в другой. Она работает нормально. Никаких проблем с ней.
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
Пожалуйста, помогите мне.
Вы должны использовать фигурные скобки вокруг имени переменной:
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
.
Оболочка не раскрывает переменные внутри одинарных кавычек. Вам нужно использовать двойные кавычки. Кроме того, как говорит Данатела, в этом случае вам также нужны фигурные скобки. Поскольку после этого оболочка попытается расширить $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