Основной синтаксис PowerShell для выбора - PullRequest
0 голосов
/ 22 сентября 2009

Справочная информация: Здесь цель состоит в том, чтобы выполнить некоторые основные команды в powershell, используя select-string. По некоторым причинам, некоторые вещи работают не так, как ожидалось.

Допустим следующее:

    $vfilter = 'c:/foo/bar/files/*.htm';
    Select-String -path $vfilter -pattern ".*DOCTY.*"  |
        sort LineNumber |
        where-object { $_.Filename -match "02" } |
        format-list |
        out-file c:/00junk.txt;

... где это вывод ...

    IgnoreCase : True
    LineNumber : 1
    Line       : <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "ht
                 tp://www.w3.org/TR/html4/loose.dtd">
    Filename   : 02junk.htm
    Path       : C:\ ... \02junk.htm
    Pattern    : .*DOCTY.*
    Context    :
    Matches    : {<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "h
                 ttp://www.w3.org/TR/html4/loose.dtd">}

Вопросы:

1) Как я могу предотвратить использование PowerShell для переноса текста "Line" и "Matches" свойства. Так как это отправляется текстовый файл, мне не важна ширина консоли и поэтому я не хочу никаких произойдет перенос текста.

2) Предположим, я хочу сделать свой собственный вывод с многострочной строкой. В рубине (например) я мог бы сделать это так:

    custom_string = '';
    items.each{|myitem|
        custom_string += %Q[
            ### begin output ###
            HereIs::LineNumber! --> #{myitem['LineNumber']}
            HereIs::Path!       --> #{myitem['Path']}
            This is the actual line (below):

            #{myitem['Line']}
        ]
    }
    custom_string.tofile('c:/00junk.txt');

Как мне заставить powershell сделать то же или подобное?

3) Как я могу сделать 2) выше с помощью PowerShell здесь-строки?

1 Ответ

8 голосов
/ 22 сентября 2009

1) Чтобы предотвратить перенос, вы можете указать огромный width параметр для Out-File.

2) Используйте ForEach-Object (псевдоним %) для генерации вашей строки:

$vfilter = 'c:/foo/bar/files/*.htm';
Select-String -path $vfilter -pattern ".*DOCTY.*"  |
    sort LineNumber |
    where-object { $_.Filename -match "02" } |
    ForEach-Object {
@"
Line Number: $($_.LineNumber)
Path:        $($_.Path)
This is the actual line (below):

$($_.Line)

"@
    } |
    out-file c:/00junk.txt;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...