PDA

Показать полную графическую версию : [решено] Выбор данных из txt по маске


hxygen
23-10-2010, 22:38
Помогите выбрать данные из txt по следующей маске: xxx.xxx.xxx.xxx думаю несложно догадаться, что это ip. Есть txt в котором много ip и не нужного текста, руками выбирать не годится. После отбора хорошо бы сохранить ip в другой txt. Надеюсь, что это реально.
Заранее спасибо.

amel27
24-10-2010, 07:28
hxygen, типичная задача для регулярных выражений..., в арсенале CMD есть только FindStr, который способен лишь вывести строки, содержащие IP... поэтому, не имея четкого представления о структуре текста браться за парсинг штатными средствами не имеет смысла

ИМХО проще всего реализовать через VBS:
strFileIn ="1.txt"
strFileOut="2.txt"

Set FSO = CreateObject("Scripting.FileSystemObject")
Set regEx = New RegExp
regEx.Pattern= "\d+\.\d+\.\d+\.\d+"
regEx.Global = True

Set oF = FSO.OpenTextFile(strFileIn,1)
sF = oF.ReadAll
oF.Close

Set Matches = regEx.Execute(sF)
Set oF = FSO.OpenTextFile(strFileOut,2)

For Each Match in Matches
oF.WriteLine(Match.Value)
Next


...но уж коли заявлена категория CMD приведу вариант на AWK (http://gnuwin32.sourceforge.net/packages/gawk.htm):
awk -v RS="[^.0-9]+" "/^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/" 1.txt >2.txt

Miko
24-10-2010, 10:07
Здравствуйте у меня примерно такая же проблема.

Есть текстовый файл,сколько строк в нем не известно. (Сегодня их 3 завтра 30).
Как мне через Bat файл вытащить нужное.. К примеру:

Start:400
Stop:500

Причем мне нужно вытащить только 400 и 500. (И снова проблема 400 и 500 могут меняться - Числа могут быть разные.).
Получается что мне нужно копировать все что находится после Start:
+ Нужно сохранить 400 в один текстовый файл а 500 в другой.

Кто может помочь?
За ранее спасибо.

hxygen
24-10-2010, 14:43
А не подскажете как VBS пользоваться? Скачал ScIte вставил код, жму скомплить-выдаёт не найден файл.

Всё, Awk прекрасно работает! Спасибо Вам большое!

amel27
24-10-2010, 15:52
не подскажете как VBS пользоваться? »ничего качать не надо - сохранить в любом текстовом редакторе с расширением VBS, запускать двойным кликом ;)

Как мне через Bat файл вытащить нужное.. К примеру:
Start:400
Stop:500»@(for /f "tokens=1* delims=: " %%a in ('findstr /birc:" *start:" "in.txt"') do @echo %%b
) >out1.txt

@(for /f "tokens=1* delims=: " %%a in ('findstr /birc:" *stop:" "in.txt"') do @echo %%b
) >out2.txtin.txt - входной файл
out1.txt, out2.txt - результат




© OSzone.net 2001-2012