Nano Hash - криптовалюты, майнинг, программирование

Разделить текстовый файл на основе строк

Я хочу разбить текстовый файл на несколько файлов, определив начало и конец каждого файла определенной строкой. Начало первого файла идентифицируется строкой "<ca>", конец - строкой "</ca>". Теперь я хочу вырезать и вставить содержимое между этими двумя строками в новый текстовый файл. До сих пор я написал этот код:

$content = Get-Content .\*.txt
{
    if ($f -eq "</ca>") { $c > .\file.txt; }
    if ($f -ne "<ca>" -and $f -ne "</ca>") { $c += $f }
}

Второе «если» должно удалить «идентификационные строки» из созданного файла.

Я столкнулся с двумя проблемами:

  • Я могу выбрать только конец текста
  • все абзацы из исходного файла больше не существуют, новый файл состоит всего из одной строки со всем, что в ней есть

Файл представляет собой VPN-конфигурацию и выглядит следующим образом:

client
dev tun
proto udp
remote 448
verify-x509-name
<ca>
Certificate:
Data:
    Version: 3 (0x2)
    Signature Algorithm: md5WithRSAEncryption
    Issuer: C=de
    -----BEGIN CERTIFICATE-----
MIICzDCCAjWgAwIBAgIJANfh65DfDF45GFSD
    -----END CERTIFICATE-----
</ca>
<cert>  
Certificate:
    Data:
        Version: 3 (0x2)
        Signature Algorithm: sha1WithRSAEncryption
        Issuer: C=de
</cert>
<key>
-----BEGIN RSA PRIVATE KEY-----
AoGBAN/jBWwRnjNtxJ+bj3U5oKhYjfu33N2dGlM9x5un9YLm9k6pBzhvG
</key>

Вывод выглядит так:

clientdev tunproto udpremote 448verify-x509-name<ca>Certificate:...

(и так далее)


  • Пожалуйста, уточните, чего вы пытаетесь достичь. Лучший способ сделать это — предоставить пример исходного файла и пример конечного результата. 25.10.2017
  • Почему вы используете скобки во 2 и 5 строке? Что такое $c, это краткая форма $content. У вас нет ни итерации, ни set-content, ни переадресации, как ›› 25.10.2017

Ответы:


1

Вам лучше сделать это с помощью многострочного регулярного выражения.

Get-Content .\vpnconfig.txt -Raw | Select-String '(?sm)<ca>(.+)</ca>' | Select -Expand Matches | Select -First 1 -Expand Value

Убедитесь, что вы используете -Raw при таком использовании Regex.

25.10.2017
  • Большое спасибо! Это сработало для меня отлично, именно так, как я хотел! 25.10.2017

  • 2

    Прочитайте файл как одну строку и используйте совпадение регулярного выражения для извлечения сертификата ЦС:

    $config = Get-Content 'C:\path\to\your.ovpn' -Raw
    
    if ($config -match '(?ms)<ca>(.*?)</ca>') {
        $matches[1].Trim() | Set-Content 'ca.crt'
    } else {
        'No CA certificate found.'
    }
    

    До PowerShell v3 используйте Get-Content | Out-String, чтобы получить содержимое файла в виде одной строки.

    25.10.2017
  • Большое спасибо! Я немного изменил его и использовал часть в Connors Script! Работает отлично! 25.10.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..