Нужен regex для исключения определенных строк

Да: вам нужно использовать внешние тома (либо собственные тома Docker, либо каталоги хоста), это не является обязательным. Удаление и воссоздание контейнеров - это чрезвычайно рутина (вам нужно сделать это, чтобы установить исправление безопасности в программном обеспечении базы данных или в среде распространения Linux, если ничего больше), и если вы удалите контейнер, вы потеряете все данные был в нем.

Типичный вызов PostgreSQL будет выглядеть следующим образом:

docker run \
  --name postgres \
  -d \
  -p 5432:5432 \
  -v $PWD/pgdata:/var/lib/postgresql/data \
  postgres:11

https://hub.docker.com/_/postgres/ перечисляет все переменные среды и пути к файловой системе контейнера. которые интересны типичному пользователю.

8
задан Hamish Downer 25 November 2008 в 19:56
поделиться

6 ответов

Некоторые regex библиотеки позволяют предвидение:

somefile(?!16\.txt$).*?\.txt

Иначе можно все еще использовать несколько классов символов:

somefile([^1].|1[^6]|.|.{3,})\.txt

или, для достижения максимальной мобильности:

somefile([^1].|1[^6]|.|....*)\.txt

[^(16)] средства: Соответствуйте любому символу, но фигурным скобкам, 1, и 6.

11
ответ дан 5 December 2019 в 06:24
поделиться

Чтобы повиноваться строго к Вашей спецификации и быть придирчивым, необходимо скорее использовать:

^somefile_(?!16\.txt$).*\.txt$

так, чтобы somefile_1666.txt, который является {что-либо}, мог быть подобран ;)

но иногда это просто более читаемо для использования...:

ls | grep -e 'somefile_.*\.txt' | grep -v -e 'somefile_16\.txt'
4
ответ дан 5 December 2019 в 06:24
поделиться

Лучшее решение было уже упомянуто:

somefile_(?!16\.txt$).*\.txt

Это работает и достаточно жадно для взятия чего-либо прибывающего в него на той же строке. Если Вы знаете, однако о желании имени правильного файла я предложил бы также ограничить недопустимые символы:

somefile_(?!16)[^?%*:|"<>]*\.txt

Если Вы работаете с regex механизмом, который не поддерживает предвидение, необходимо будет рассмотреть, как составить это! 16. Можно разделить файлы на две группы, те, которые запускаются с 1 и не сопровождаются 6, и те, которые запускаются с чего-либо еще:

somefile_(1[^6]|[^1]).*\.txt

Если Вы хотите позволить somefile_16_stuff.txt, но НЕ somefile_16.txt, эти regexes выше недостаточно. Необходимо будет установить предел по-другому:

somefile_(16.|1[^6]|[^1]).*\.txt

Объедините это все, и Вы заканчиваете с двумя возможностями, та, которая блокирует единственный экземпляр (somefile_16.txt) и тот, который блокирует все семейства (somefile_16*.txt). Я лично думаю, что Вы предпочитаете первый:

somefile_((16[^?%*:|"<>]|1[^6?%*:|"<>]|[^1?%*:|"<>])[^?%*:|"<>]*|1)\.txt
somefile_((1[^6?%*:|"<>]|[^1?%*:|"<>])[^?%*:|"<>]*|1)\.txt

В версии, не удаляя специальные символы, таким образом, легче читать:

somefile_((16.|1[^6]|[^1).*|1)\.txt
somefile_((1[^6]|[^1]).*|1)\.txt
5
ответ дан 5 December 2019 в 06:24
поделиться

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

Если цель состояла в том, чтобы сделать задание, а не найти идеальный regex, рассмотреть тот подход. Часто намного легче записать и понять, чем regex, который использует экзотические функции.

2
ответ дан 5 December 2019 в 06:24
поделиться
somefile_(?!16).*\.txt

(?! 16) средства: Утверждайте, что невозможно соответствовать regex "16", запускающемуся в том положении.

3
ответ дан 5 December 2019 в 06:24
поделиться

Не используя предвидение

somefile_(|.|[^1].+|10|11|12|13|14|15|17|18|19|.{3,}).txt

Считайте его как: somefile_ сопровождаемый также:

  1. ничего.
  2. один символ.
  3. любой символ кроме 1 и сопровождаемый любыми другими символами.
  4. три или больше символа.
  5. также 10 .. 19 отметьте это 16 был не учтен.

и наконец сопровождаемый .txt.

1
ответ дан 5 December 2019 в 06:24
поделиться
Другие вопросы по тегам:

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