Регулярное выражение в findstr для поиска URL-адресов в текстовых файлах во всех подпапках

Я борюсь с довольно простой задачей CMD.

У меня есть корневая папка (C:\folder), в которой много подпапок, каждая из которых содержит файлы разного типа. Я хочу выполнить поиск по всем txt-файлам во всех подпапках, чтобы найти URL-ссылки. В конце я хочу поместить все ссылки в один файл. Мое регулярное выражение для поиска URL-адреса выглядит так:

(https?|ftp|file)://\)?[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]

и это работает

Моя последняя идея была:

for /R C:\folder %%F in (*.txt) do (
   findstr /r "(https?|ftp|file)://\)?[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]"  >> results.txt
)

Вы можете помочь мне? Что мне не хватает?

Я подумал, что вам нужно использовать /R для регулярного выражения (на данный момент у меня нет доступа к машине с Windows, чтобы проверить)

cybernetic.nomad 25.06.2024 20:17

переход с /r на /R ничего не изменил

roadtosleep 25.06.2024 21:06

Кажется вероятным, что обработка регулярных выражений findstr.exe не полностью поддерживает все используемые функции. Кроме того, findstr.exe необходимо указать, какой файл он должен читать.

lit 25.06.2024 23:43
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
65
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не уверен, что это регулярное выражение является универсальным идентификатором URL-адреса, но если вы хотите поместить его в команду PowerShell:

Get-ChildItem -Recurse -File -Filter '*.txt' |
   Select-String -Pattern '(https?|ftp|file)://\)?[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]'

Как предложил @mklement0:

Get-ChildItem -Recurse -File -Filter '*.txt' |
    Select-String -Pattern '(https?|ftp|file)://\)?[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]' |
    ForEach-Object { $_.Matches.Value }

и:

Get-ChildItem -Recurse -File -Filter '*.txt' |
    Select-String -Pattern '(https?|ftp|file)://\)?[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]' |
    ForEach-Object { $_.Matches.Value } >results.txt

Я бы не стал помещать файл results.txt в тот же каталог, поскольку он будет включен, если команда будет запущена еще раз. Возможно, разместив его в домашнем каталоге.

Get-ChildItem -Recurse -File -Filter '*.txt' |
    Select-String -Pattern '(https?|ftp|file)://\)?[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]' |
    ForEach-Object { $_.Matches.Value } |
    Out-File -Path '~/results.txt'

Другие вопросы по теме