![]() |
Поиск и копирование текста
Как можно осуществить такую задачу:
Имеется текстовый файл, нужно найти определённое имя в строчке и скопировать всю эту найденную строчку и всю строчку ниже в другой файл. И так для всех вхождений в исходном файле. Сейчас делаю очень тупо: Для каждого нужного имени копирую исходный файл во временные файлы. К примеру, если надо найти 3 имени: dmitry, alexy, sergy то копирую исходный файл 3 раза. И в каждом удаляю всё, кроме нужного - в temp_dmitry, например, остаются строчки с вхождением dmitry и следующей строчки за ней. Потом эти файлы соединяю. Тупо, но как по другому осуществить задуманное, я понять не могу. Удаляю всё, кроме нужного так: Код:
@echo off sed.exe -i "/dmitry/,+1!d" %filename% - эта команда для нахождения вхождения dmitry и 1 строчки ПОСЛЕ. А как, например, сделать, чтоб находилось вхождение и строчка ПЕРЕД? Пробовал вместо +1 писать -1 - не вышло. |
Обязательно sed?
Для старых grep, которые без поддержки --no-group-separator (не нашёл под windows с оным): Код:
grep -B1 -P "(dmitry|alexy|sergy)" INPUT.TXT | grep -v "^--$" > OUTPUT.TXT -A1 - если надо захват 1 строки после искомой (After) остальное в grep --help |
Цитата:
Сейчас попробовал в AutoIT через StringSplit и последующей записью в другой файл FileWriteLine, вроде работает. Но хотелось бы понять, как это сделать в SED. Добавлено: Смотрю документацию grep, чтоб попробовать удалить искомую строчку и строчку выше, вроде бы так, но не выходит: Код:
egrep.exe -v -B1 "(dmitry|alexy|sergy)" 1.txt > 2.txt Код:
egrep.exe -v "(dmitry|alexy|sergy)" 1.txt > 2.txt |
Цитата:
Если всё-таки важнее результат, то вот VBS
Код:
FileIn = "Z:\Box_In\filein.txt" 'Имя исходного файла |
Время: 00:08. |
Время: 00:08.
© OSzone.net 2001-