В PowerShell, как я могу получить строки «DDD», которые * могут * включать возвращаемые мне специальные символы, которые содержат «DDD» - PullRequest
0 голосов
/ 23 января 2019

В PowerShell и с использованием файла данных с именем SOF.txt , как мне получить строки DDD , которые могут включать "специальные" символы, возвращаемые вчто содержит DDD , но с удалением дублированных результатов и сортировкой результатов в алфавитном порядке?

Используемая версия PowerShell: 5.1.15063.1446

ПРИМЕР:

СОДЕРЖАНИЕ ФАЙЛА SOF.TXT:

AAA BBB CCC DDD EEE FFF GGG

AAA BBB CCC DDD EEE FFF GGG

BLAHBLAHBLAH

BLAHBLAHBLAH

CCC 111.DDD EEE FFF GGG

CCC 111.DDD EEE FFF GGG

ddd.222 EEE FFF GGGG

ддд.222 EEE FFF GGG

AAA BBB CCC DDD.!@#.333 EEE FFF GGG

AAA BBB CCC DDD.!@#.333 EEE FFF GGG

AAA BBB CCC !@#.333.DDD EEE FFF GGG

AAA BBB CCC !@#.333.DDD EEE FFF GGG

BBB CCC SOF.DDD EEEFFF GGG

BBB CCC SOF.DDD EEE FFF GGG

ОЖИДАЕМЫЕ РЕЗУЛЬТАТЫ:

!@#.333.DDD

111.DDD

DDD

DDD.!@#.333

ддд.222

SOF.DDD

Ответы [ 3 ]

0 голосов
/ 23 января 2019

Бывает так, что это делает однострочник:

 (Get-Content -Path sof.txt) -split " " | Where-Object { $_ -match "DDD" } | Sort-Object -Unique

(Get-Content sof.txt) вычисляет массив строк в файле.Затем этот массив анализируется и далее разделяется на пробелы (-split " "), давая массив «слов», который, в свою очередь, передается в Where-Object для сопоставления с «DDD» (без учета регистра) ({$_ -match "DDD"})и эти слова, соответствующие «DDD», передаются по каналу Sort-Object, который затем собирает и сортирует их и генерирует только один экземпляр (-Unique) каждой получаемой строки.

0 голосов
/ 23 января 2019

это сделает работу [ ухмылка ] ...

# fake reading in a text file
#    in real life, use Get-Content
$InStuff = @'
AAA BBB CCC DDD EEE FFF GGG
AAA BBB CCC DDD EEE FFF GGG
BLAHBLAHBLAH
BLAHBLAHBLAH
CCC 111.DDD EEE FFF GGG
CCC 111.DDD EEE FFF GGG
ddd.222 EEE FFF GGG
ddd.222 EEE FFF GGG
AAA BBB CCC DDD.!@#.333 EEE FFF GGG
AAA BBB CCC DDD.!@#.333 EEE FFF GGG
AAA BBB CCC !@#.333.DDD EEE FFF GGG
AAA BBB CCC !@#.333.DDD EEE FFF GGG
BBB CCC SOF.DDD EEE FFF GGG
BBB CCC SOF.DDD EEE FFF GGG
'@ -split [environment]::NewLine

$Target = 'DDD'

$HasTarget = $InStuff -match $Target
$OnlyTargetSegment = $HasTarget.Split(' ').Where({$_ -match $Target}) |
    Sort-Object -Unique

$OnlyTargetSegment

вывод ...

!@#.333.DDD
111.DDD
DDD
DDD.!@#.333
ddd.222
SOF.DDD

1-й -match захватывает тольколинии, которые соответствуют цели.2-й -match захватывает только сегменты разделения, которые содержат цель.

0 голосов
/ 23 января 2019

Это может дать вам то, что вы ищете.

Get-Content -Path '.\sof.txt' |
    ForEach-Object { $_.split(' ') } |
    ForEach-Object { if ($_ -match 'DDD') { $_ }} |
    Sort-Object -Unique

Стиль одной строки, но непрофессионально для включения в сценарий .ps1.

gc '.\sof.txt'|%{$_.split(' ')}|%{if($_ -match 'DDD'){$_}}|sort -u

Одна строкастиль, заимствованный у @Jeff Zeitlin:

(gc .\sof.txt)-split' '|where{$_-match'DDD'}|sort -u
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...