Как извлечь текст внутри первой пары двоеточий [дубликат]

В последнем выпуске Windows «Fall Creators Update» можно монтировать пути UNC или любую другую файловую систему, к которой Windows может получить доступ, из WSL.

Вы можете сделать это с помощью команды mount, как обычно, с файловой системой «drvfs», предоставляемой WSL:

sudo mount -t drvfs '\\server\share' /mnt/share

Одиночные кавычки полезны вокруг пути UNC, так что вы не нужно избегать обратной косой черты. Вы можете монтировать в произвольный каталог; Я использовал /mnt/shareв качестве примера, но подойдет любой пустой каталог.

Все файлы будут отображаться с полными разрешениями a+rwx777. Реальные права доступа будут проверены, когда вы попытаетесь получить доступ к файлу, и вы можете получить ошибку в этот момент, даже если кажется, что операция должна быть выполнена успешно. Каждый читаемый файл будет рассматриваться как исполняемый.


Для местоположений, для которых требуются учетные данные, у вас есть три варианта:

  1. Перед подключением перейдите к расположению с помощью Проводника Windows и выполните аутентификацию. WSL унаследует ваши учетные данные и разрешения. Это самый простой способ для одноразового использования.
  2. Используйте команду net useиз командной строки или net.exe useизнутри WSL ( cd /mnt/cсначала для подавления предупреждения ). Вам понадобится что-то вроде net.exe use \\server\share /USER:. Вместо этого вы можете использовать '*'для запроса пароля. Другие конфигурации показаны с помощью net.exe help use.
  3. Используйте диспетчер учетных данных Windows для настройки сохраненных учетных данных. Я никогда не делал этого.

Я понимаю, что саму Samba можно заставить работать и под WSL, но, поскольку хост предоставляет ту же функциональность, я бы использовал встроенную версию из Windows, когда она доступна. smbclientв первую очередь предназначен для доступа по протоколу FTP к серверам SMB и извлечения/помещения отдельных файлов, и он должен работать, как обычно, при соответствующей настройке.

0
22.03.2018, 04:33
2 ответа

Во-первых, проще всего это сделать с помощью других инструментов, например. cut -d: -f2 20180213.tmp, awk -F: '{print $2}' 20180213.tmp.

Однако я также хотел объяснить, почему ваш grepметод не работает. Это потому, что он соответствует всем строкам после :. Чтобы исправить это, вы можете сопоставить первое :в регулярном выражении только с первым в обработанной строке, добавив перед ним ^[^\:]*. Таким образом, любой символ перед исходным регулярным выражением не может быть :. Полная команда:

grep -oP '^[^\:]*\:\K[^\:]+' 20180213.tmp

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

grep -oP '^[^:]*:\K[^:]+' 20180213.tmp
2
28.01.2020, 02:32

Действительно, использование других инструментов, таких как cut, является лучшим способом, но я также хочу добавить решение sed:

sed -r 's/^[^:]+: ?([^:]+):.*/\1/' 20180213.tmp

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

0
28.01.2020, 02:32

Теги

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