Редактирование файлов (вырезать, вставить, массово)

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

qwerty
Сообщения: 22
Зарегистрирован: Вт май 26, 2009 20:41

Сообщение qwerty »

Я уезжал, не успел закончить, сейчас продолжаю.

Продолжил с того, на чем остановился и сразу получилось.
Tol!k писал(а):

Код: Выделить всё

ssed.exe -i.bak -r "s/^[ \[\$]*(.*\.)[^\.]*$/YOURPREFIX\1/" *.txt
Работает как надо.

Всем большое спасибо за участие! И с наступающем.
qwerty
Сообщения: 22
Зарегистрирован: Вт май 26, 2009 20:41

Сообщение qwerty »

А где можно посмотреть, как правильно писать то, что будет удалено при исполнение

Код: Выделить всё

ssed.exe -i.bak -r "s/^[ \[\$]*(.*\.)[^\.]*$/YOURPREFIX\1/" *.txt
Мне нужно убирать помимо пробела все английские буквы, цифры и символы <>:;="/.-'
Пытаюсь прописать в квадратных скобках, а не получается.
qwerty
Сообщения: 22
Зарегистрирован: Вт май 26, 2009 20:41

Сообщение qwerty »

С предыдущим вопросом разобрался. Получилось.
Еще оказалось, что в некоторых файлах конец строки заканчивается ненужными символами, которые идут с точкой. Соответственно удаление происходит до точки без учета этих ненужных символов. Можно ли используя команду, приведенную Tol!k'ом сделать так: если в конце строки перед точкой идут цифры, символы или англ. буквы, то после точки добавлять определенные символы. А если до точки идут русские буквы, то ничего не делать кроме удаления мусора, как сейчас.

Какая часть этой команды отвечает за конец строки?

Код: Выделить всё

ssed.exe -i.bak -r "s/^[ \[\$]*(.*\.)[^\.]*$/YOURPREFIX\1/" *.txt
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

Попробуй ssed.exe -i.old -r "s/(\B[^А-я]*\.)$/\1POSTFIX/" *.txt
= если последнее слово не кончается кириллицей, то добавить POSTFIX
*Кодировка символов А-я в команде должна совпадать с оной в файлах.

Про регулярные выражения можно прочитать в справке ТС.

Код: Выделить всё

Вот список наиболее важных метасимволов:
^	Начало строки.
$	Конец строки.
.	Любой символ.
\w	Алфавитно-цифровой символ или знак подчёркивания '_'.
\W	Дополнение к \w, т.е. любой символ, кроме алфавитно-цифровых и подчёркивания.
\d	Цифра.
\D	Дополнение к \d (не цифра).
\s	Разделитель между словами (пробел, табуляция и пр.).
\S	Дополнение к \s (любой символ, кроме разделителей).
\b	Указывает границу слова.
\B	Указывает, что данная позиция не является границей слова.
qwerty
Сообщения: 22
Зарегистрирован: Вт май 26, 2009 20:41

Сообщение qwerty »

Спасибо, Tol!k. Работает.
Сейчас вроде больше ничего не надо. Т.е. надо, но самому много время уйдет делать.
Хочу в файлы, в конец вставлять строку кода, которая будет браться из подготовленного файла. Т.е. есть пять файлов и один подготовленный файл с пятью строками кода. Надо из подготовленного файла брать строку и вставлять ее в один из пяти файлов. Код который надо вставлять это код видео с youtube.
Как total commander при групповом переименовывание может брать названия для файлов из файла.
Есть есть решение, буду рад ссылки.
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

qwerty писал(а):Хочу в файлы, в конец вставлять строку кода, которая будет браться из подготовленного файла.
Отдельной строкой или дописать к существующей?
Примеры имён файлов и кода для вставки...
qwerty
Сообщения: 22
Зарегистрирован: Вт май 26, 2009 20:41

Сообщение qwerty »

Tol!k писал(а):Отдельной строкой или дописать к существующей?
Как лучше, я не знаю. Если без разницы, то лучше отдельной.
Tol!k писал(а):Примеры имён файлов и кода для вставки...
1.txt
2.txt
3.txt
...
подготовленный файл с кодами - kod.txt
код такой

Код: Выделить всё

<object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/Hv8gqj3kzg4?fs=1&amp;hl=ru_RU"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/Hv8gqj3kzg4?fs=1&amp;hl=ru_RU" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object>
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

Отдельной строкой проще.

Код: Выделить всё

@echo off &chcp 1251 >nul
setlocal enableextensions enabledelayedexpansion

set "str=kod.txt"

set /a cnt=1
for /f "usebackq delims=" %%a in ("%str%") do (
echo.%%a>>!cnt!.txt
set /a cnt+=1
)
Jonmey
Сообщения: 59
Зарегистрирован: Пн сен 27, 2010 14:01

Сообщение Jonmey »

Кто-нибудь знает, как заменить в бинарном файле в искомой строке подстроку? То есть, речь идет от патчере работающем в режиме s&r -ищется заданный паттерн бинарной строки и заменяется ее часть. Таких строк м.б. несколько и их вхождений в каждом файте - тоже.
Однако все обрабатываемые файлы одного типа и их расширения м.б. заданы маской.
Необходимо, чтобы это решение можно было прикрутить на кнопку ТС стандартным образом для обработки, или выделенных файлов, или всех файлов в папке.
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

Конкретизируйте.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Для выделенных файлов скрипт Batya как раз и решает описанное. А маску можно задать в ТС на выделение (cm_SelectFiles), это не проблема.
Jonmey
Сообщения: 59
Зарегистрирован: Пн сен 27, 2010 14:01

Сообщение Jonmey »

Например, в папке лежит несколько файлов вида

Код: Выделить всё

file1.ext
file2.ext
file3.ext
В них нужно найти заменить бинарные строки, типа:

Код: Выделить всё

D1 F2 F0 EE EA E0 5F 31 5F EA EE F2 EE F0 F3 FE 5F E8 F9 E5 EC ?? ?? ?? ?? ??
(где ?? - любой байт)

на

Код: Выделить всё

?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? D1 F2 F0 EE EA
(где ?? означает, что соответствующий байт отстается неизменным при замене).

Таких пар замен несколько, и их вхождений в каждом файле тоже может быть несколько.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Стоило сразу указать на шестнадцатеричный формат представления. Я бы пока этой прогой воспользовался.
Jonmey
Сообщения: 59
Зарегистрирован: Пн сен 27, 2010 14:01

Сообщение Jonmey »

Стоило сразу указать на шестнадцатеричный формат представления.
Кто-нибудь знает, как заменить в бинарном файле в искомой строке подстроку?
Я бы пока этой прогой воспользовался.
Нужен способ как это сделать из командной строки, то есть без гуишного фейса, поскольку речь идет не об одном файле или группе файлов, а о мнгочисленных файлах разбросанных в разных местах, и если пользоваться каждый раз оконной программой (коих миллион), то никаких, ни сил, ни терпения не хватит.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Jonmey
Бинарность файла не указывает на то, в каком формате нужно обрабатывать этот файл.
Что касаемо группы файлов, то не вижу проблем - жмётся Ctrl+O и вперёд. Причём тут гуишность...
Миллион? Да хотя бы указание на парочку других подобных (Asc + Dec + Hex) уже станет для меня прозрением. Вперёд.
Ответить