Получение sed для замены текста аргументом - PullRequest
2 голосов
/ 12 мая 2009

Хорошо, я знаю, что это простой вопрос, но я не могу заставить эту команду sed работать. Я пытаюсь получить текстовый файл и заменить один бит из текста-заполнителя в учебный код. Код исследования, которым он будет заменен, передается в сценарий с помощью аргументов при первом запуске сценария. Проблема в том, что, когда я пытаюсь заменить текст заполнителя переменной $ study, он заменяет его буквально на «$ study».

Прямо сейчас мои аргументы установлены так:

исследование экспорта = $ 1

тег экспорта = $ 2

режим экспорта = $ 3

выбор экспорта = $ 4

Моя команда sed выглядит следующим образом:

sed -i.backup -e 's / thisisthestudycode, замените этот с наибольшим количеством кода / $ study /' freq.spx

Есть ли какой-нибудь простой способ получить sed, чтобы не смотреть на буквальное $ study, или было бы лучше в этот момент сделать это по-другому?

Ответы [ 3 ]

13 голосов
/ 12 мая 2009

Используйте двойные кавычки вместо одинарных.

Поскольку кавычка ' запрещает расширение переменных оболочки, а кавычка " - нет.

1 голос
/ 13 мая 2009

Вы, вероятно, не столкнетесь с этой проблемой, но на всякий случай ...

Ответ Пола немного неоптимален, если $study может содержать косую черту или другие символы со специальным значением sed.

mv freq.spx freq.spx.backup && \
    awk -v "study=$study" '{
        gsub(/thisisthestudycodereplacethiswiththestudycode/, study);
        print;
    }' freq.spx.backup > freq.spx

Хотя это неудобно (ха, каламбур!), Это всегда будет работать независимо от содержимого $study.

0 голосов
/ 11 июня 2013

попробуйте это ................... sed -e 's /% d /' $ a '/ g' amar.htm, amar.htm содержит строку "% d", которая действительно должна быть заменена, и "a" содержит строку для замены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...