Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Маскирование многострочного текстового файла

Ответить
Настройки темы
PowerShell - [решено] Маскирование многострочного текстового файла

Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Привет.
Есть некий тескстовый файл с неопределенным количеством одинаковых по длине строк. Задача, удалить (или заменить на ***) из каждой строки любые символы с 1 по 8 потом 40 по 248 и т.д. Как бы так регексп написать в реплейсе чтобы любые символы менял именно в нужном месте.
Спасибо за помощь, ногами не бить в регекспах дуб дубом...

Отправлено: 23:06, 15-12-2014

 

Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
(Get-Content file.txt) | Foreach {$_ -replace "^.{8}(.{31}).{208}(.*)",'$1$2'} | Out-File result.txt
или Substring:

Код: Выделить весь код
Get-Content file.txt | Foreach {$_.Substring(7,31) + $_.Substring(247)} | Out-File result.txt

Последний раз редактировалось Kazun, 15-12-2014 в 23:32.

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:24, 15-12-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Kazun:
"^.{8}(.{31}).{208}(.*)",'$1$2' »
Можно подробностей?
Как я понимаю
^ - начало строки
. - любой символ
{8} - до восьмого по счету, включительно или нет?
^.{8} - это $1?
(.{31}) - 31 любой символ пропустить?
.{208} - после 31-го символа любые символы до 208 (это получается $2?)
Почему получается 208? Это 8+31+208 это 247 откуда ещё единица?
Как получается $1$2 - это те символы что не попадают под выражение?
Цитата Kazun:
{$_.Substring(7,31) + $_.Substring(247)} »
Через Substring нужно выбирать только те символы что нужно оставить получается?

Извиняюсь за занудство, но хочется разобраться чтобы в будущем понимать что к чему.
Спасибо.

Отправлено: 12:22, 16-12-2014 | #3


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


.{8} - ровно 8

Код: Выделить весь код
PS > "aaaaaa" -replace ".{8}"
aaaaaa
PS > "aaaaaaaa" -replace ".{8}"
^.{8} - это $1? - нет
(.{31}) - это $1 (символы с 9 по 39)

.{208} - ровно 208
(.*) - $2 (оставшиеся символы c 249)

248 - 40 = 208

Как получается $1$2 - это те символы что не попадают под выражение? - Все символы подпадают по выражение, но надо оставить символы,кроме с 1 по 8 потом 40 по 248

Отправлено: 12:30, 16-12-2014 | #4


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Шаблон:
Код: Выделить весь код
^.{8}(.{31}).{208}(.*)
  1. «^»: привязка к началу строки; без этого поиск совпадений будет продолжен с любого символа.
  2. «.{8}»: 8 любых символов.
  3. «.{31}»: 31 любых символов.
  4. «.{208}»: 208 любых символов.
  5. «.*»: любое количество (в том числе и пустое) любых символов.
Скобки «(…)» группируют символы шаблона в подвыражения. В данном случае у нас два неименованных подвыражения, содержимое которых доступно в виде переменных «$1» и «$2».

Примерная строка:
Код: Выделить весь код
0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789… всего 208 символов…0123456789012345
Поскольку квантификатор «*» — «жадный», выражение «.*» из п.5 захватит все оставшиеся символы до конца строки.
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:01, 16-12-2014 | #5


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


в таком случае если у нас строка 473 символа, а нам нужно удалить значения с 1 по 7, с 20 по 283, с 297 по 311, с 326 по 473.
то будет ^.{7}(.{13}).{283}(.{14}).{311}(.{15}).473?, $1$2$3
или я со скобками напортачил?

Отправлено: 13:10, 16-12-2014 | #6


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$str.Substring(7,12)+$str.Substring(283,13)+$str.Substring(311,14)
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:20, 16-12-2014 | #7


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


в математике запутался
^.{7}(.{12}).{283}(.{13}).{311}(.{14}).473?, $1$2$3
Код: Выделить весь код
$file = Get-Content "C:\Scripts\file.txt"
$regexp = "^.{7}(.{12}).{283}(.{13}).{311}(.{14}).473?"
$replace = '$1$2$3'
 foreach ($line in $file) { $line -replace $regexp,$replace }
оно?

Отправлено: 13:39, 16-12-2014 | #8


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$str -replace "^.{7}(.{12}).{264}(.{13}).{15}(.{14}).{148}$",'$1$2$3'
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:00, 16-12-2014 | #9


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Странно, но -replace выводит тоже самое, что и изначально было в строке.

Отправлено: 14:46, 16-12-2014 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Маскирование многострочного текстового файла

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Замена текстового файла (2) Snimda Скриптовые языки администрирования Windows 1 28-10-2013 20:10
CMD/BAT - Сборка текстового файла из содержимого другого текстового файла icomboy Скриптовые языки администрирования Windows 0 10-09-2013 15:17
CMD/BAT - Изменение текстового файла SANIOK_AV Скриптовые языки администрирования Windows 0 09-11-2012 11:52
CMD/BAT - [решено] Разбивка текстового файла файла Seryoga204 Скриптовые языки администрирования Windows 1 04-10-2010 21:19
CMD/BAT - [решено] Как скопировать имя файла из текстового файла в код батника и т.д. Nun-Nun Скриптовые языки администрирования Windows 6 13-05-2009 13:28




 
Переход