anode |
|
Темы:
8
Сообщения:
1019
Участник с: 30 августа 2011
|
Вот такой
ЗЫ. Пример работы
|
heider |
|
Темы:
0
Сообщения:
83
Участник с: 09 декабря 2015
|
anode, не совсем то, что нужно. Не удаляется символ "│". Вот пример перевода help из make menuconfig, пропущенного через Ваш фильтр: Чтобы удалить эти палки, нужна замена:
Ну и хотелось бы вообще избавить текст от переносов строк: окно и так небольшое, там без символа \n все гораздо компактнее, переносы делаются автоматом по размеру окна, да и нам, собственно нужен только сам перевод без всякого форматирования. Эта же команда уберет пустые строки.Предлагаю такой вариант, если опять нигде не ошибся, вроде работает:
Вот тот же текст, переведенный после этого фильтра: Как видим, текст не только получился компактнее, но и несколько изменился по смыслу.
|
nafanja |
|
Темы:
94
Сообщения:
9252
Участник с: 02 июня 2012
заблокирован
|
anodeошибся все таки... тестовые данные
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874 |
anode |
|
Темы:
8
Сообщения:
1019
Участник с: 30 августа 2011
|
Почему бы и нет? Выкинуть лишние болтики и пройдет Первая команда удаляет лидирующие пробельные символы, а последняя удаляет пустую строку, поэтому особого смысла в /^\s+$/d нет.Ваша конструкция s/ \+/ /g; не справляется Так что \s\S рулят :)Про употребление звездочек, приводящих при удалении к нужному результату, я уже писал, нет смісла повторять. PS. + таки работает в BRE если его забэкслешить. Абшибочка вышла. |
nafanja |
|
Темы:
94
Сообщения:
9252
Участник с: 02 июня 2012
заблокирован
|
anodeну да и не должна была обрабатывать еще и табы... а что имелось ввиду четко прописано в комментарии...
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874 |
vasek |
|
Темы:
47
Сообщения:
11853
Участник с: 17 февраля 2013
|
Я использую такой фильтр ... меня устраивает, все мои примеры работают ...EDIT 1 - tr -dc '[:print:]' - удаляет все непечатаемые символы. а вот так выглядит перевод из man
EDIT 2 - можно и еще проще - удаляем все ведущие пробелы любого типа и все непечатаемые символы
EDIT 3 - а вообще то фильтр должен подбирать каждый сам для себя ... а кому то он и вообще не нужен ... все индивидуально. Вопрос к red - написали много лишнего, может есть смысл подчистить?, чтобы на захламлять продукт - решать тебе
Ошибки не исчезают с опытом - они просто умнеют
|
heider |
|
Темы:
0
Сообщения:
83
Участник с: 09 декабря 2015
|
vasekНаверное, имеет смысл вынести его куда-нибудь вверх, в сеттинг переменных. И действительно мнение автора неплохо бы услышать. |
red |
|
Темы:
30
Сообщения:
1517
Участник с: 31 августа 2011
|
vasekда не, всё нормально, пусть будет vasek heiderидея с фильтром очень интересная, пока пробую разные варианты хотелось бы иметь возможность легко применять больше чем одного фильтра за раз, через ключи это будет не очень удобно, возможно через специальный файл фильтров будет проще подключать нужные фильтры а ненужные комментировать |
vasek |
|
Темы:
47
Сообщения:
11853
Участник с: 17 февраля 2013
|
Крутил я с переводм man, пробуя разные фильтры … и ничего мне не нравится … Чтобы было понятно, опишу подробнее Возьмем кусок man Если его перевести без фильтра, то получим Если его перевести с фильтром (с разными, приведенными в топике), то получим Ни тот ни другой вариант вообщем то не смотрятся. Перепробовал кучу фильтров, представляющих однострочные конструкции, но ничего не получилось (пробовал даже на уровне байтов…)В ручную на уровне байтов все получается замечательно, как пример, если удалить следующие две последовательность байтов (выделена жирным) 1. 00000067 68 69 63 68 20 69 73 20 73 70 65 63 69 61 6c 69 |hich is speciali| 00000077 7a 65 64 0a 20 20 20 20 20 20 20 66 6f 72 20 74 |zed. for t| 2. 000000e0 6f 6e 73 2e 20 57 68 65 6e 0a 20 20 20 20 20 20 |ons. When. | 000000f0 20 69 6e 70 75 74 20 69 73 20 72 65 61 64 20 74 | input is read t| то получим следующий текст а вот так будет выглядеть его перевод без всяких фильтров
1 шаг - все пробелы, если их больше 2-х, заменяем на 1 - это делается просто, используя sed sed 's/ */ /g' …. или sed 's/\x20 */ /g' В результате так будут выглядеть эти две последовательности, приведенные выше 00000060 63 68 20 69 73 20 73 70 65 63 69 61 6c 69 7a 65 |ch is specialize| 00000070 64 0a 20 66 6f 72 20 74 65 78 74 75 61 6c 20 64 |d. for textual d| …………. 000000d0 69 6f 6e 73 2e 20 57 68 65 6e 0a 20 69 6e 70 75 |ions. When. inpu| 000000e0 74 20 69 73 20 72 65 61 64 20 74 68 61 74 20 6d |t is read that m| 2 шаг - удалить символ LF (0a) ….. а вот это шаг у меня, используя sed, не получается … а писать скрипт … не хочется. Вот на этом я и остановился. Нужно лезти в DOC … PS - зачеркнул, имхо, так не пойдет, нужный байт 0a легче искать (а потом удялять) по присутствию рядом с ним кучи пробелов ... EDIT 1 - используя sed могу удалить любой символ на уровне байтов, но только не управляющий символ LF (hex код которого есть 0a) ... и похоже его не удалить, значит нужен другой способ ... или может поможет awk ??? ... используя dd, конечно можно удалить этот байт oa, но усложнится запись ...
Ошибки не исчезают с опытом - они просто умнеют
|
heider |
|
Темы:
0
Сообщения:
83
Участник с: 09 декабря 2015
|
anodeА так нельзя?
Или я не совсем понял, что требуется... Нужно оставить перенос и отступ после DESCRIPTION, а остальные переносы удалить? |