1

У меня проблема с тем, что sed не возвращает то, что я ожидаю, когда использую шаблон регулярных выражений для очистки некоторого вывода из запроса MySQL.

mysql -uroot -p -e 'SELECT `path` FROM db.media_gallery' | sed -n -r 's/[^\/]+([^\s]+).*/\1/p'

Запрос возвращает несколько строк, таких как эти:

| /media/M/W/lmt_MWS04_8.png    |
| /media/M/W/lmt_MWS02_11.png   |

Когда я передаю это через команду sed, указанную выше, она возвращает это:

//M/W/lmt_MWS04_8.png
//M/W/lmt_MWS02_11.png

Куда делись "СМИ"? Почему он случайно удаляет часть моей строки?

Кто-нибудь знает, как исправить мое регулярное выражение?

2 ответа2

3

Нет необходимости в sed, реальная проблема в том, что вы используете предварительно проверенный вывод mysql, предназначенный для человека, а не для автоматического потребления. Это простая задача, на которую mysql более чем способен.

mysql -N -s -r -uroot -p -e 'SELECT `path` FROM db.media_gallery'

вернусь:

/media/M/W/lmt_MWS04_8.png
/media/M/W/lmt_MWS02_11.png

от 'man mysql':

--skip-column-names, -N
--silent, -s
--raw, -r
0

"Медиа" соответствует «[^/]+», поэтому его заменили на элементы в скобках. Если вы хотите, вам нужно открыть скобки перед этим предложением регулярных выражений.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .