Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Поиск в одном текстовом файле с заменой в другом (http://forum.oszone.net/showthread.php?t=268507)

cortes_ 21-09-2013 13:30 2221396

Поиск в одном текстовом файле с заменой в другом
 
Привет всем!
Передо мной встала следующая задача. Есть текстовый файл (исходный):
читать дальше »
Hostname=srv1.corp.contoso.com
IPAddress= 10.1.1.1
Active=True


Есть текстовый второй файл (назначение):
читать дальше »
Server=server
IPAddress= 10.1.1.1
Hostname=server.server
Active=True


Необходимо полностью скопировать строку,содержащую Hostname из первого файла, с заменой строки Hostname во втором файле. Т.е. на выходе во втором файле вместо изначального Hostname, появится строка из первого файла. Строки не обязательно будут в том порядке как в примере, могут быть и перемешаны.
Я честно пытался реализовать скрипт через регулярные выражения, но не вышло.
Текст скрипта:
читать дальше »

Код:

Dim objFSO
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
Set wshshell = CreateObject("wscript.shell")
workDir = wshshell.ExpandEnvironmentStrings(WshShell.CurrentDirectory)
Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.Global = False 
objRegEx.IgnoreCase = True
objRegEx.Pattern = "Hostname=[A-Za-z0-9-]+"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFileSrc = objFSO.OpenTextFile(workDir & "\source.txt", 1)
srcString = objFileSrc.ReadLine ' Тут неправильно, читается только первая строка,а не идет поиск по всему файлу
objFileSrc.Close

Set objFileDes = objFSO.OpenTextFile(workDir & "\destination.txt", 2)
strSearchString = "Hostname="
strNewString = objRegEx.Replace(strSearchString,srcString)
objFileDes.WriteLine strNewString
objFileDes.Close

На всякий случай в приложении тестовые файлы и сам скрипт.

Foreigner 21-09-2013 13:58 2221407

Исходя из конкретных файлов. Батник:
Код:

@echo off
1>dest.tmp (

    findstr /i "hostname" src.txt
    findstr /i /v "hostname" dest.txt

)
move dest.tmp dest.txt

PowerShell:
Код:

(gc dest.txt) -replace 'hostname=.*',(sls 'hostname' src.txt).line | sc dest.txt


Время: 10:12.

Время: 10:12.
© OSzone.net 2001-