Почему одно и то же sed regex (после grep) выходит из строя при запуске в сценарии bash или командной строке bash?

Вот сценарий. Это успешно, когда я запускаю его из приглашения BASH , но не в скрипте. Есть идеи?


Когда я говорю «fail», я имею в виду, что sed regex ничего не соответствует, поэтому нет замененного текста. Когда я запускаю его в командной строке, он совпадает.

Кроме того, я мог бы ответить на это. Это связано с моим псевдонимом grep и GREP_OPTIONS имеющим странное взаимодействие. Я вернусь с подробностями о них.

 #!/bin/bash for ((x = 101; x <= 110; x++)); do urls="${urls} www$x.site.com/config" done; curl -s ${urls} | grep -i "Git Commit" | sed -r "s/.*Git Commit<\/td><td>([^<]+).*/\1/g" 

  • Команда SSH ведет себя по-разному в Expect Script
  • как проверить, используется ли таблица mysql или приложение обращается к таблице в сценарии оболочки?
  • Вставка строки в файл только в том случае, если эта строка еще не является частью файла
  • Выполнение скрипта на удаленном сервере, содержащемся на стороне клиента
  • Условная grepping
  • Debian (jessie) с XFCE, сеансами и запуском: приложение Autostart
  • Почему ssh -nq -t не может видеть переменную окружения?
  • Заменить имя файла с именем папки (csh)
  • One Solution collect form web for “Почему одно и то же sed regex (после grep) выходит из строя при запуске в сценарии bash или командной строке bash?”

    Я действительно мог это понять, и я полагаю, что добавлю его сюда для следующего гуглера, который ударяет головой о ту же стену.

    У меня был grep-псевдоним и GREP_OPTIONS . Это привело к тому, что подсветка цвета оставалась включенной в скрипт, даже когда соединение с другой командой. Это обычно не очень хорошо сочетается с sed .

    Вот мои .alias и параметры:

     alias grep='grep -i --color' export GREP_OPTIONS="--color=always" 

    Поэтому, когда вы запускаете скрипт, он не использует команду aliased и поэтому всегда включает цвет. Поэтому, когда я проверил свой псевдоним и увидел параметр --color (что означает auto , что означает «не выводить цвет, который передается по другой команде» (например, sed ).

    Я был в замешательстве, потому что забыл, что у меня также был установлен GREP_OPTIONS , поэтому я ожидал, что grep в скрипте будет иметь color установленный auto по умолчанию (как если бы я не установил глобальные GREP_OPTIONS ). Но не так.

    Вот мои новые настройки (я считаю, что флаг GREP_OPTIONS для GREP_OPTIONS избыточен, но я оставляю его там как напоминание):

     alias grep='grep --color=always' export GREP_OPTIONS="--ignore-case --color" 

    Таким образом, всякий раз, когда я нахожусь в командной строке, я буду выделять все мои greps (чего обычно хочу). Но в сценариях он по умолчанию будет окрашиваться только тогда, когда не будет передан в другую команду. Мне все равно придется добавлять –color = всегда ко многим моим сценариям (так как я предпочитаю выделять в большинстве случаев даже при подключении к другой команде, если только я не вижу выхода).

    Linux и Unix - лучшая ОС в мире.