Лог-файл Windows SyncToy содержит несколько тысяч строк вида:
ххх ... C:\ ZZZ. ххх ...
а также
ххх ... ззз \. ххх ...
где xxx может быть строкой, включающей любой печатный символ, включая пробелы и / или пробелы
и ZZZ может быть строкой включая любые печатаемые символы , включая пробела, обратные косые черты, число, альфа (любом случае),. характер, подчеркивание, эм-тире, ан-тире
Каждая строка всегда будет содержать строку zzz. как и выше, который может начинаться с символов C:\, за которыми следует строка неопределенной длины (но, скажем, максимум 256 символов) и заканчиваться символом a . персонаж; но он не всегда может начинаться с C:\, он может просто начинаться с некоторых печатаемых символов.
zzz всегда начинается с символа (столбца) 41
Как вы узнаете, C:\zzz. следует шаблону абсолютного пути к файлу под Windows (точнее 7) с завершающим . характер, но не всегда завершающий обратный слеш.
Таким образом, типичная строка будет:
Error: Cannot read from the source file Error: Cannot read from the source file AppData\Roaming\Microsoft\Crypto\RSA\S-1-5-21-981944830-553675151-235582288-1001\. Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
Другой будет:
Error: Cannot read from the source file C:\Users\zamenhof\AppData\Local\Microsoft\Windows\Explorer\thumbcache_256.db. The process cannot access the file because it is being used by another process. (Exception from HRESULT: 0x80070020) Copying C:\Users\zamenhof\AppData\Local\Microsoft\Windows\Explorer\thumbcache_256.db to G:\gc\Users\zamenhof\AppData\Local\Microsoft\Windows\Explorer\thumbcache_256.db
Мое требование состоит в том, чтобы извлечь каждый полный путь из каждой строки. Таким образом, в первом примере выше, мой желаемый результат будет
AppData\Roaming\Microsoft\Crypto\RSA\S-1-5-21-981944830-553675151-235582288-1001\.
а во втором:
C:\Users\zamenhof\AppData\Local\Microsoft\Windows\Explorer\thumbcache_256.db.
Очевидно , что я могу вырезать первые 40 символов от каждой строки, но это все - таки оставляет меня со строкой , чтобы соответствовать , который имеет неопределенной длины, и может содержать любые или все пробелы, буквенно - цифровых символов,. символы, подчеркивание и обратный слеш.
Я знаком с простыми регулярными выражениями, но не могу найти способ создать те, которые мне нужны, с использованием grep (или sed, awk или любого другого наиболее подходящего инструмента) для извлечения строк, которые я хочу.
Файлы будут поступать из Win7, но, вероятно, будут манипулироваться в Linux. Доступны расширенные инструменты регулярных выражений.
Если есть более простой способ справиться с этим, чем использование текстовых инструментов Linux и регулярных выражений, я буду рад продолжить это тоже.