Добавить текст в каждую строку текстового файла с помощью PowerShell

Я хотел бы добавить символы в конец каждой строки текста в документе .txt.

#Define Variables
$a = c:\foobar.txt
$b = get-content $a

#Define Functions
function append-text  
    {  
    foreach-Object  
        {  
        add "*"  
        }  
    }  

#Process Code
$b | append-text

Что-то такое. По сути, загрузите данный текстовый файл, добавьте «*» в конце каждой строки текста в этом текстовом файле, сохраните и закройте.


person Joshua    schedule 10.02.2011    source источник


Ответы (3)


Что-то вроде этого должно работать:

function append-text { 
  process{
   foreach-object {$_ + "*"}
    } 
  }
person mjolinor    schedule 10.02.2011
comment
Если вы используете фильтр, вам вообще не нужен блок process, например. filter Append-Text {"$_*"} - person Keith Hill; 10.02.2011
comment
Это отлично работает! Можно ли добавить сюда проверку избыточности? Что-то, что бы проверять наличие *, и если его нет в конце строки, то добавлять? - person Joshua; 10.02.2011
comment
Конечно, filter Append-Text {if ($_ -match '\*\s*$') {$_} else {"$_*"}} - person Keith Hill; 10.02.2011
comment
Иногда люди просто ищут пример того, как что-то сделать, и представляют простой пример для использования, который легче решить каким-либо другим методом, но который на самом деле не отвечает на вопрос, который они задавали. В других случаях правильным ответом является предоставление им альтернативного метода. Иногда я ошибаюсь. - person mjolinor; 10.02.2011
comment
Я думаю, что регулярное выражение Кейта выше '\s*$' неверно. В любом случае вместо -match я бы использовал -like, т.е. $_ -notlike '*`' - person Elroy Flynn; 10.02.2011
comment
Ну, первая звездочка была экранирована, когда я ее написал. Кажется, что комментарии SO поглощают это. Позвольте мне попробовать двойное экранирование - '\\*\s*$' .... И это работает намного лучше. - person Keith Hill; 10.02.2011

Функция не нужна. Это сделает это:

$b|foreach {$_ +  "*"}
person Elroy Flynn    schedule 10.02.2011
comment
И если вас беспокоят запястья gc c:\foobar.txt | %{"$_*"}. Это требует интенсивного использования псевдонимов, но я склонен использовать PowerShell для множества разовых операций в командной строке, и чем меньше мне приходится печатать, тем больше мои запястья не ненавидят меня. :-) - person Keith Hill; 10.02.2011
comment
Это определенно работает, но я надеялся сохранить его в формате функции, чтобы при необходимости можно было вызвать его снова. Вы, вероятно, правы, моя цель в этом скрипте, вероятно, делает необходимость в функции ненужной. - person Joshua; 10.02.2011

Просто потребовалось около 2 часов, чтобы разобраться, никогда раньше не использовал Powershell, но вот:

cls
#Define Functions
(gc g:\foobar.txt) -replace '\S+$','$& 1GB RAM 1x 1 GB Stick' | out-file "g:\ram 6400s.txt"

Измените местоположение файла. Первый файл — это файл, который вы хотите отредактировать. Второй - выходной файл.

person Sam Skidmore    schedule 24.11.2011
comment
Я не понимаю, почему \S (без пробелов)? Я думаю, что .+ будет подходящим вариантом. - person Elroy Flynn; 30.11.2011