2014-11-14 3 views
1

в моем Tcsh сценарий у меня есть этотTcsh Shell Script: заменить переменную с использованием СЭД внутри файла

sed -i "s/^${y}$//g" $x 

Как получить эту работу? либо я не получаю никаких изменений, либо некоторая ошибка, например, Illegal Variable Name или Variable name должна содержать буквенно-цифровые символы. Пробовали разные комбинации «». '' внутри sed. Пример

sed 's/^'"${y}"'$//g' $x 

ответ

2

Расширение имен переменных в строках с двойными кавычками является сложным в tcsh. В вашей команде:

sed -i "s/^${y}$//g" $x 

значение оболочки или переменное окружения $y должно быть расширено правильно, но оболочка будет пытаться расширить $/ до значения $/, который, как говорится в сообщении об ошибке нелегального имя переменного ,

Ваша вторая команда:

sed 's/^'"${y}"'$//g' $x 

является почти правильно; это просто отсутствует аргумент -i для sed.

Это должно работать: . СЕПГ 's/^' "$ {у}" '$ // г' $ х

{ и } вокруг 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 в начале каждой строки. Кажется, это то, что вы пытаетесь сделать, но я не могу быть уверен.

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