![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Поиск и копирование текста |
|
CMD/BAT - Поиск и копирование текста
|
Старожил Сообщения: 288 |
Как можно осуществить такую задачу:
Имеется текстовый файл, нужно найти определённое имя в строчке и скопировать всю эту найденную строчку и всю строчку ниже в другой файл. И так для всех вхождений в исходном файле. Сейчас делаю очень тупо: Для каждого нужного имени копирую исходный файл во временные файлы. К примеру, если надо найти 3 имени: dmitry, alexy, sergy то копирую исходный файл 3 раза. И в каждом удаляю всё, кроме нужного - в temp_dmitry, например, остаются строчки с вхождением dmitry и следующей строчки за ней. Потом эти файлы соединяю. Тупо, но как по другому осуществить задуманное, я понять не могу. Удаляю всё, кроме нужного так: @echo off set filename=temp_dmity.txt ECHO Удаление всего, кроме sed.exe -i "/dmitry/,+1!d" %filename% sed.exe -i "/dmitry/,+1!d" %filename% - эта команда для нахождения вхождения dmitry и 1 строчки ПОСЛЕ. А как, например, сделать, чтоб находилось вхождение и строчка ПЕРЕД? Пробовал вместо +1 писать -1 - не вышло. |
|
Отправлено: 12:10, 05-04-2020 |
Старожил Сообщения: 352
|
Профиль | Отправить PM | Цитировать Обязательно sed?
Для старых grep, которые без поддержки --no-group-separator (не нашёл под windows с оным): -B1 - захват 1 строки до искомой (Before) -A1 - если надо захват 1 строки после искомой (After) остальное в grep --help |
Отправлено: 14:04, 05-04-2020 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 288
|
Профиль | Отправить PM | Цитировать Цитата iglezz:
Сейчас попробовал в AutoIT через StringSplit и последующей записью в другой файл FileWriteLine, вроде работает. Но хотелось бы понять, как это сделать в SED. Добавлено: Смотрю документацию grep, чтоб попробовать удалить искомую строчку и строчку выше, вроде бы так, но не выходит: Выходит только удалить просто строку: |
|
Последний раз редактировалось DenchikK, 05-04-2020 в 16:50. Отправлено: 14:18, 05-04-2020 | #3 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать Цитата DenchikK:
Если всё-таки важнее результат, то вот VBS
FileIn = "Z:\Box_In\filein.txt" 'Имя исходного файла FileOut = "Z:\Box_In\fileout.txt" 'Имя выходного файла WhatFind = Array("dmitry", "alexy", "sergy") 'Ключевые слова поиска Prefix = "" 'Префикс ключевого слова, например " " Suffix = "" 'Суффикс ключевого слова, например "," Set FSO = CreateObject("Scripting.FileSystemObject") Set Fin = FSO.OpenTextFile(FileIn, 1, False) Text = Split(Fin.ReadAll, vbCrLf) Fin.Close N1 = LBound(Text) NN = UBound(Text) Set Fout = FSO.CreateTextFile(FileOut, 2) ', True) With CreateObject("VBScript.RegExp") .IgnoreCase = True For Each Mem In WhatFind .Pattern = ".*" + Prefix + Mem + Suffix + ".*" For i = N1 To NN If .Test(Text(i)) Then Fout.WriteLine Text(i) If i + 1 <= NN Then Fout.WriteLine Text(i + 1) End If Next Next End With Fout.Close |
|
------- Последний раз редактировалось megaloman, 05-04-2020 в 20:30. Отправлено: 20:23, 05-04-2020 | #4 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Поиск и копирование текста из одного ini-файла в другой с помощью bat-ника | Nun-Nun | Скриптовые языки администрирования Windows | 10 | 12-08-2016 22:32 | |
VBS/WSH/JS - Поиск текста в файлах и копирование результата по сети | anton_ego | Скриптовые языки администрирования Windows | 4 | 25-02-2013 12:42 | |
CMD/BAT - [решено] Поиск и копирование нужного текста | ajakzs | Скриптовые языки администрирования Windows | 1 | 07-08-2012 18:31 | |
VBS/WSH/JS - [решено] Поиск и копирование текста из файла | KaKTuZ49 | Скриптовые языки администрирования Windows | 2 | 03-11-2011 13:38 | |
копирование текста | volin | Хочу все знать | 10 | 08-01-2007 00:18 |
|