Я в настоящее время подаю заявку ниже команды в csh
через сценарий оболочки.
sed -i "s/cb $i$/cb $i $cb/" */callback_events
Где:
$i
- Значение переменной i
$cb
- Значение Переменной cb$
- Соответствовать концу строкиОднако я получаю следующую ошибку с вышеупомянутой командой.
Variable name must contain alphanumeric characters.
Моя текущая оболочка /bin/csh
.
Вы должны заключать символ $
в кавычки, когда он стоит в строке в двойных кавычках; в противном случае оболочка будет думать, что вводит расширение переменной, и будет недовольна, если символ после нее не является алфавитным или одной из специальных переменных.
sed -i "s/cb $i\$/cb $i $cb/" */callback_events
Здесь есть два уровня интерпретации символов.
Сначала оболочка читает команду и применяет ее правила. Одно из правил заключается в том, что внутри двойных кавычек $
вводится расширение переменной, если не указано в кавычках.
После завершения оболочки команда выглядит следующим образом:
sed -i s/cd <value-of-i>$/cd <value-of-i> <value-of-cb/ dir1/callback_events dir2/callback_events...
Обратите внимание, что кавычки пропали, $i
и $cb
заменены их значениями, а \$
стало просто $
. Также */callback_events
был заменен списком файлов.
Это затем передается в sed
, который применяет свои правила. Одно из этих правил заключается в том, что $
в конце шаблона поиска означает конец строки.
На Ubuntu Studio 18 $
ошибка должна колотить уведомление расширения ошибки, когда Вы работаете $0
по сравнению с $(0)
по сравнению с $0
Альтернатива поиску в конец строки в sed
сценарий находит все и использует &
переменная для добавления вещей после него; это используется как это:
$ echo "this was here" | sed -e 's_.*_& YOURFOOBAR_'
Если Вы учитесь sed
сценарий можно стремиться выходить как клавиша Home с ^
и добавьте несколько sed
команды с ;
символ (символы). Здесь я использую _
или /
попеременно для замены sed
команда сценария 's///'
$ echo "this was here" | sed -e 's/^/PREFIXEDTEXT /;s_.*_& SUFFIXEDTEXT_'
Примечание: Тестовая команда искажается как так псевдоним [=test
таким образом, это делает проблемы, я думаю с Расширением удара. посмотрите вещи удара человека как &|
не работать.
Наконец, я предлагаю покупать книгу от eBay вместо того, чтобы пытаться учиться здесь.
Используя sed скопируйте все содержимое, вставьте и вставьте символ в конце, неэффективно, но работает
alias insert_single_quote_at_end ' echo hi | sed "s/.*/&'\''/" '
вывод:
hi'