Ошибка при соответствии Концу строки с $ в команде Sed

Я в настоящее время подаю заявку ниже команды в csh через сценарий оболочки.

sed -i "s/cb $i$/cb $i $cb/" */callback_events

Где:

  • $i - Значение переменной i
  • $cb - Значение Переменной cb
  • $ - Соответствовать концу строки

Однако я получаю следующую ошибку с вышеупомянутой командой.

Variable name must contain alphanumeric characters.

Моя текущая оболочка /bin/csh.

1
задан 12 December 2016 в 13:37

3 ответа

Вы должны заключать символ $ в кавычки, когда он стоит в строке в двойных кавычках; в противном случае оболочка будет думать, что вводит расширение переменной, и будет недовольна, если символ после нее не является алфавитным или одной из специальных переменных.

sed -i "s/cb $i\$/cb $i $cb/" */callback_events

Здесь есть два уровня интерпретации символов.

  1. Сначала оболочка читает команду и применяет ее правила. Одно из правил заключается в том, что внутри двойных кавычек $ вводится расширение переменной, если не указано в кавычках.

  2. После завершения оболочки команда выглядит следующим образом:

    sed -i s/cd <value-of-i>$/cd <value-of-i> <value-of-cb/ dir1/callback_events dir2/callback_events...
    

    Обратите внимание, что кавычки пропали, $i и $cb заменены их значениями, а \$ стало просто $. Также */callback_events был заменен списком файлов.

  3. Это затем передается в sed, который применяет свои правила. Одно из этих правил заключается в том, что $ в конце шаблона поиска означает конец строки.

4
ответ дан 3 December 2019 в 06:56

На 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 вместо того, чтобы пытаться учиться здесь.

0
ответ дан 3 December 2019 в 06:56

Используя sed скопируйте все содержимое, вставьте и вставьте символ в конце, неэффективно, но работает

alias insert_single_quote_at_end ' echo hi | sed "s/.*/&'\''/" '

вывод:

hi'
0
ответ дан 2 April 2020 в 00:02

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

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