2010-11-08 2 views
3

У меня есть десять текстовых файлов (с разделителями табуляции, строки 200K). Я намерен искать символы [,], | и замените их соответственно a, o, u. Любые подсказки, как это сделать, используя пакетный скрипт Windows или Powershell?Powershell или Batch: найти и заменить символы

ответ

11

Это должно позаботиться об этом, используя Powershell. Это можно сделать с помощью прямых файлов cmd.exe и некоторых встроенных исполняемых файлов Windows, но было бы намного уродливее и сложнее понять.

Он прочтет в некотором файле, и в каждой строке:

  • заменить [ с a
  • заменить ] с o
  • заменить | с u

Необходимы ускользает с [, ] и | - все специальные символы в powershell, а обратная сторона ` используется для команд word-wrap.

$filename="textfile.txt" 
$outputfile="$filename" + ".out" 

Get-Content $filename | Foreach-object { 
    $_ -replace '\[', 'a' ` 
     -replace '\]', 'o' ` 
     -replace '\|', 'u' 
} | Set-Content $outputfile 

Если вы хотите обработать список файлов, вы можете настроить массив для этого и запустить массив.

$filenames = @("/path/to/File1.txt", "file2.txt", "file3.txt") 
foreach ($file in $filenames) { 
    $outfile = "$file" + ".out" 

    Get-Content $file | Foreach-object { 
     $_ -replace '\[', 'a' ` 
      -replace '\]', 'o' ` 
      -replace '\|', 'u' 
    } | Set-Content $outfile 
} 
+0

Хорошо, спасибо! – jjoras

+1

Вы действительно не должны использовать() вокруг Get-Content, если только вам не нужно редактировать файл на месте - он заставляет все строки собираться перед заменой, что будет очень дорого с большими файлами – Jaykul

+0

@Jaykul, спасибо, я обновлю свой пост. – birryree

Смежные вопросы