1

Тема: CMD/BAT: Добавление символов в каждую строку файла

Здравствуйте!
Помогите, пожалуйста, решить задачу.
Ситуация такая: в каждой строке большого текстового файла содержится один адрес сайта. Строк много - тысячи. Задача состоит в том, чтобы вместо просто адреса сайта подставить туда регулярное выражение, расширяющее этот адрес до шаблона. Причём, в некоторых строках такой шаблон уже стоит.
То есть каждую строку нужно проверить на наличие регулярного выражения, и если его нет - то подставить его.
Получается так: из такой строки:
yandex.ru
Сделать две таких:
^http://yandex.ru
^http://.*\.yandex.ru
Старую убрать, новые оставить.

Заранее благодарен.

P.S. Дело в том, что неожиданно - и, как обычно, в последний момент - стало необходимо обеспечить выполнение закона N 436-ФЗ "О защите...". Смысл его в том, чтобы запретить доступ к определенной информации. Сделать это можно, практически, только с помощью "белых листов" доступа в интернет. Приличных готовых листов, как ни странно, не существует, так что лучше всего будет собрать из разных источников свой. Тут вот и возникла вышеизложенная задача.
Надеюсь на помощь.

2 (изменено: Rumata, 2012-11-26 21:21:18)

Re: CMD/BAT: Добавление символов в каждую строку файла

Средствами пакетного файла не получится. Используйте полноценные языки программирования - либо нативные для Windows (если задачу решаете там), либо сторонние, например, perl, pythin, etc. Например, JScript имеет мощный аппарат для работы с регулярными выражениями.

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

( 2 * b ) || ! ( 2 * b )

3

Re: CMD/BAT: Добавление символов в каждую строку файла

(
for /f "tokens=*" %%a in ('findstr /b /c:"^" list.txt') do (
    echo.%%a
)
echo.
for /f "tokens=*" %%a in ('findstr /v /c:"^" list.txt') do (
    echo.^^http://%%a
    echo.^^http://.*\.%%a
)
)>>new.txt

4

Re: CMD/BAT: Добавление символов в каждую строку файла

!k пишет:
(
for /f "tokens=*" %%a in ('findstr /b /c:"^" list.txt') do (
    echo.%%a
)
echo.
for /f "tokens=*" %%a in ('findstr /v /c:"^" list.txt') do (
    echo.^^http://%%a
    echo.^^http://.*\.%%a
)
)>>new.txt

Спасибо! Но, к сожалению, этого недостаточно для решения задачи.

5 (изменено: fsc_psd, 2012-11-27 03:57:46)

Re: CMD/BAT: Добавление символов в каждую строку файла

Rumata пишет:

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

Исходный файл, например, таков:

yandex.ru
rambler.ru
http://google.com
www.aport.ru
^http://somedomain.net
^http://.*\.somedomain.net

Результирующий должен выглядеть так:

^http://yandex.ru
^http://.*\.yandex.ru
^http://rambler.ru
^http://.*\.rambler.ru
^http://google.com
^http://.*\.google.com
^http://aport.ru
^http://.*\aport.ru
^http://somedomain.net
^http://.*\.somedomain.net

Первые две строки, как справедливо заметили выше, проблем не создают.
В третьей и четвёртой имеется лишнее начало: "http://" и "www". Его нужно удалить (к счастью, это вроде бы все возможные варианты "лишнего начала": семь и четыре символа соответственно).
Пятая и шестая строки уже содежат необходимый код, так что их изменять не нужно, просто перенести в новый файл.
Также иногда встречается лишний символ в конце строки - "/". Он вроде бы не мешает, но для единообразия его бы тоже неплохо удалить, если он есть.