TCSH Shell Script: подставьте переменную, используя sed внутри файла
В моем сценарии tcsh у меня есть это
sed -i "s/^${y}$//g" $x
Как мне заставить это работать? либо я не получаю никаких изменений, либо какая-либо ошибка, например, Недопустимое имя переменной или Имя переменной, должна содержать буквенно-цифровые символы. Пробовал разные комбинации "". "внутри сед. пример
sed 's/^'"${y}"'$//g' $x
1 ответ
Расширение имен переменных в двойных кавычках сложно в tcsh. В вашей команде:
sed -i "s/^${y}$//g" $x
значение оболочки или переменной среды $y
должен быть расширен правильно, но оболочка будет пытаться расширить $/
к стоимости $/
, который, как говорится в сообщении об ошибке, является недопустимым именем переменной.
Ваша вторая команда:
sed 's/^'"${y}"'$//g' $x
почти правильно; это просто не хватает -i
аргумент sed
,
Это должно работать: sed 's/^'"${y}"'$//g' $x
{
а также }
вокруг y
в этом случае не нужны, так что вы можете написать:
sed 's/^'"${y}"'$//g' $x
Или вы можете сделать это так:
sed -i "s/^$y"'$'"//g" $x
Эта последняя версия переключается с двойных кавычек на одинарные и обратно на двойные, только вокруг $
персонаж. Важно подчеркнуть, хотите ли вы использовать одинарные кавычки только вокруг $
что вы не хотите расширяться, или использовать двойные кавычки только вокруг $y
который вы хотите расширить.
Еще проще, вы можете избежать $
символ в строке в двойных кавычках, предшествуя ему \
(Я думаю, что это может быть характерно для tcsh; оригинальный csh, возможно, не смог этого сделать). Поэтому я думаю, что это предпочтительный подход - при условии, что у вас есть tcsh, а не старый csh:
sed -i "s/^$y\$//g" $x
Я предполагаю, что вы хотите обновить файл с именем $x
на месте, удаляя строку, содержащуюся в $y
в начале каждой строки. Кажется, это то, что ты пытаешься сделать, но я не уверен.