CMD/BAT - [решено] Замена переноса строки на пробел
-
IVV
CMD/BAT - [решено] Замена переноса строки на пробел
Необходимо написать BAT-файл, который будет заменять во внешнем файле все переносы строки на пробелы. Главная проблема в том, что в файле более 9000 строк
-
IVV
Re: CMD/BAT - [решено] Замена переноса строки на пробел
Windows не имеет своих инструментов командной строки для работы с текстовыми файлами произвольного содержания, поэтому приходится использовать сторонние утилиты... например,
пример для замены CRLF на пробел:
Код:
Swiss File Knife
- продвинутый текстовый процессор командной строкипример для замены CRLF на пробел:
Код:
Код: Выделить всё
sfk rep file.txt -spat "/\r\n/ /" -yes-
PcDOK
Re: CMD/BAT - [решено] Замена переноса строки на пробел
Цитата:
Swiss File Knife - продвинутый текстовый процессор командной строки
приятно удивил. Возможностей много. Спасибо.
Подскажите как (возможно ли это) при замене текста, добавлять число, что то типа счетчика замен.
Чтобы к каждой замене добавлялась цифра
примено так :
заменить user- при каждой замене на user-1, user-2 ....user-n
Swiss File Knife - продвинутый текстовый процессор командной строки
приятно удивил. Возможностей много. Спасибо.
Подскажите как (возможно ли это) при замене текста, добавлять число, что то типа счетчика замен.
Чтобы к каждой замене добавлялась цифра
примено так :
заменить user- при каждой замене на user-1, user-2 ....user-n
-
amel27
Re: CMD/BAT - [решено] Замена переноса строки на пробел
Цитата PcDOK:
заменить user- при каждой замене на user-1, user-2 ....user-n
через SFK имхо не выйдет - логика слабовата, вариант через
Код:
заменить user- при каждой замене на user-1, user-2 ....user-n
CMD/BAT - [решено] Замена переноса строки на пробел
через SFK имхо не выйдет - логика слабовата, вариант через
AWK
:Код:
Код: Выделить всё
awk -v RS="user-" -v ORS="" "{if (NR>1) print RS NR-1;print}" TEST.TXT-
PcDOK
Re: CMD/BAT - [решено] Замена переноса строки на пробел
ОТЛИЧНО!!!!
правда приходится использовать и sfk и AWK, но работает.
вот
что получилось
(скрипт считывает какие адреса выдал DHCP сервер, и делает файл install-dhcp.bat , который привязывает МАС адрес к IP адресу.)
Код:
после
Код:
получаю файл dump.tmp вида:
Код:
а после всех манипуляций получаю
Код:
Наверно можно было бы как то упростить, но уже и так работает.
СПАСИБО.
правда приходится использовать и sfk и AWK, но работает.
вот
что получилось
(скрипт считывает какие адреса выдал DHCP сервер, и делает файл install-dhcp.bat , который привязывает МАС адрес к IP адресу.)
Код:
Код: Выделить всё
set IPP=192.168.0.
set FF=install-dhcp.bat
set FFD=dump.tmp
set FFD2=dump2.tmp
netsh dhcp server scope %IPP%0 show clients > dump.tmp
sfk filter %FFD% > %FFD2% "-ls+%IPP%*" -spat -rep "_-??.??.???? *-D_\"comp\" \"\" \"\"_" -rep "_- NEVER *-D_\"comp\" \"\" \"\"_" -rep "_- 255.255.255.0__" -rep "_-__"
sfk replace %FFD2% "/%IPP%/netsh dhcp server scope %IPP%0 add reservedip %IPP%/" -yes
awk -v RS="comp" -v ORS="" "{if (NR>1) print RS NR-1;print}" %FFD2% > %FF%после
Код:
Код: Выделить всё
netsh dhcp server scope %IPP%0 show clients > dump.tmpполучаю файл dump.tmp вида:
Код:
Код: Выделить всё
Контекст текущей области изменен на область 192.168.0.0.
Тип: N - NONE, D - DHCP B - BOOTP, U - UNSPECIFIED, R - RESERVATION IP
==================================================================================
IP-адрес - Маска подсети - Уникальный код (ID) - Срок действия - Тип ==================================================================================
192.168.0.41 - 255.255.255.0 -00-80-48-29-8f-29 - NEVER EXPIRES -D
192.168.0.210 - 255.255.255.0 - 00-0f-3d-cc-45-db -05.03.2010 8:05:10 -D
192.168.0.211 - 255.255.255.0 -00-03-47-7a-3c-22 - NEVER EXPIRES -D
192.168.0.212 - 255.255.255.0 - 00-24-8c-d7-c2-f0 -05.03.2010 9:06:29 -D
192.168.0.213 - 255.255.255.0 - 00-c0-26-2e-3f-be -05.03.2010 7:59:29 -D
192.168.0.216 - 255.255.255.0 -00-e0-4c-32-7f-d0 - NEVER EXPIRES -D
192.168.0.217 - 255.255.255.0 - 00-18-f3-0e-29-a4 -05.03.2010 8:18:16 -D
192.168.0.218 - 255.255.255.0 - 00-18-f3-7a-4e-55 -26.02.2010 10:34:49 -D
192.168.0.219 - 255.255.255.0 - 00-18-f3-0e-4a-bd -05.03.2010 10:28:28 -D
192.168.0.220 - 255.255.255.0 - 00-18-f3-0e-29-28 -05.03.2010 9:55:59 -D
192.168.0.221 - 255.255.255.0 -00-0d-88-39-b6-1e - NEVER EXPIRES -D
192.168.0.222 - 255.255.255.0 -00-0f-ea-1b-fd-27 - NEVER EXPIRES -D
Число клиентов (версии 4): 12 в области : 192.168.0.0.
Команда успешно завершена.а после всех манипуляций получаю
Код:
Код: Выделить всё
netsh dhcp server scope 192.168.0.0 add reservedip 192.168.0.41 008048298f29 "comp1" "" ""
netsh dhcp server scope 192.168.0.0 add reservedip 192.168.0.210 000f3dcc45db "comp2" "" ""
netsh dhcp server scope 192.168.0.0 add reservedip 192.168.0.211 0003477a3c22 "comp3" "" ""
netsh dhcp server scope 192.168.0.0 add reservedip 192.168.0.212 00248cd7c2f0 "comp4" "" ""
netsh dhcp server scope 192.168.0.0 add reservedip 192.168.0.213 00c0262e3fbe "comp5" "" ""
netsh dhcp server scope 192.168.0.0 add reservedip 192.168.0.216 00e04c327fd0 "comp6" "" ""
netsh dhcp server scope 192.168.0.0 add reservedip 192.168.0.217 0018f30e29a4 "comp7" "" ""
netsh dhcp server scope 192.168.0.0 add reservedip 192.168.0.218 0018f37a4e55 "comp8" "" ""
netsh dhcp server scope 192.168.0.0 add reservedip 192.168.0.219 0018f30e4abd "comp9" "" ""
netsh dhcp server scope 192.168.0.0 add reservedip 192.168.0.220 0018f30e2928 "comp10" "" ""
netsh dhcp server scope 192.168.0.0 add reservedip 192.168.0.221 000d8839b61e "comp11" "" ""
netsh dhcp server scope 192.168.0.0 add reservedip 192.168.0.222 000fea1bfd27 "comp12" "" ""Наверно можно было бы как то упростить, но уже и так работает.
СПАСИБО.
-
amel27
Re: CMD/BAT - [решено] Замена переноса строки на пробел
Цитата PcDOK:
приходится использовать и sfk и AWK
в разборе текста AWK самодостаточен, где-то так:
Код:
приходится использовать и sfk и AWK
CMD/BAT - [решено] Замена переноса строки на пробел
в разборе текста AWK самодостаточен, где-то так:
Код:
Код: Выделить всё
set IPP=192.168.0.0
set FF=install-dhcp.bat
>%FF% (netsh dhcp server scope %IPP% show clients|^
awk -v FS="[ -]+" -v Q="\"" "$1~/^[0-9]/ {N+=1;print \"netsh dhcp server scope %IPP% add reservedip \"$1\" \"$3$4$5$6$7$8\" \"Q\"comp\"N Q\" \"Q Q\" \"Q Q}"
)-
PcDOK
Re: CMD/BAT - [решено] Замена переноса строки на пробел
ОГРОМНОЕ спасибо, исключительный пример программирования и знания предмета.
(буду учить мат.часть
)
(буду учить мат.часть
)