vasek |
|
Темы:
47
Сообщения:
11853
Участник с: 17 февраля 2013
|
heiderЕсли использовать данный фильтр (например, удаляем все лишние пробелы, а затем используем tr -d '\n' или tr '\n', ' '), типа то получаем следующий перевод Все в один абзац, что не есть хорошо - представь, имеем несколько абзацев/перечислений через - (тире) ... и все сольется в один абзац.А вот если удалить только в нужных местах, то не нужно применять утилиту tr и получим типа такого
Это недостаток man ... и также присутсвует в pdf, но там проявляется иногда еще в большей степени. Это хорошо зметно, если посмотреть на кусок текста по другому символ \n здесь в принципе не нужен - логически здесь строка не заканчивается, а если смотреть по другому, то это будет менее понятно здесь символ \n изображен как hex код 0a, а дальше идет 6 лишних пробелов ( hex код 20)Возможно я хреново объясняю, многие мне об этом говорят ... PS - а вообще мне в байтах все более понятнее и проще - когда что то до меня не доходит, перехожу на уровень байтов. EDIT 1 - похоже слишком замутил и лучше в эти дебри не углубляться, а оставить все как есть. .... возможно red что то замутит на awk ...
Ошибки не исчезают с опытом - они просто умнеют
|
vasek |
|
Темы:
47
Сообщения:
11853
Участник с: 17 февраля 2013
|
heiderИ да - это похоже единственный вариант - не получится просто определить, что конкретно нужно удалять . Пример А вот так этот кусок выглядит в байтах И видим после DESCRIPTION туже комбинацию байтов (0a 20 20 20 20 20 20), которая может удалится - не возможно ее отличить от другого такого же куска.Вывод - оставил у себя вариант TextIn="$(xsel -o | sed 's/ */ /g' | tr -d '\n')" ... и забыл об этом ...
Ошибки не исчезают с опытом - они просто умнеют
|
heider |
|
Темы:
0
Сообщения:
83
Участник с: 09 декабря 2015
|
vasek, sed и awk вряд ли подойдут. Они для построчной обработки хорошо подходят. А здесь нужно объединять строки, да еще и не всякие. Я примерно представляю, как это сделать на СИ: исключать символ 0a, если за ним после нескольких пробелов и табуляций следует строчная буква, но в баше не силен, поэтому - тоже сдаюсь. :) |
vasek |
|
Темы:
47
Сообщения:
11853
Участник с: 17 февраля 2013
|
heiderДа это здесь не пойдет ... что я вижу, так это скрипт, но не строчное, а побайтовое чтение файла/текста (или если построчное, то нужно строку переводить к виду HEX, к последовательности байт) и ряда условий проверки, но это уже не то ... а потому даже не стал и пытаться, забросил.
Ошибки не исчезают с опытом - они просто умнеют
|
anode |
|
Темы:
8
Сообщения:
1019
Участник с: 30 августа 2011
|
sed загружает строку для обработки без \n. Символ \n добавляется при выводе или многострочной обработке, например, команда N:
|
vasek |
|
Темы:
47
Сообщения:
11853
Участник с: 17 февраля 2013
|
anodeПолностью согласен - sed читает по одной строке за раз и отсекает завершающий символ перевода строки (в дальнейшей обработке этот символ не участвует). Но я считал, что раз sed понимает и видит этот символ, то значит может его обрабатывать ... но все мои попытки с обработкой этого символа (удаление, замена) безуспешны … и решил, что только использование tr поможет в этом. Но, не успокоился на этом и продолжил поиски, чтобы понять - может ли sed обрабатывать символ \n ?… и поиски увенчались успехом - sed все-таки умеет обрабатывать этот символ. Сейчас вместо используемой конструкции прописал следующую конструкцию, без привлечения утилиты tr
PS - результат тот же (... но плохо то, что все вместе ...) EDIT 1 - привожу аналог и для awk (может пригодится red) - awk 1 ORS=' ' - как всегда, намного лаконичнее ...
Ошибки не исчезают с опытом - они просто умнеют
|
heider |
|
Темы:
0
Сообщения:
83
Участник с: 09 декабря 2015
|
vasekЕсли уж говорить о лаконичности, то можно и вот так: и лишние пробелы с табуляциями заберет, и перевод строки останется только один в самом конце.
|
vasek |
|
Темы:
47
Сообщения:
11853
Участник с: 17 февраля 2013
|
heiderточно - один в один - прописал и этот вариант. Но не понятно, почему дает такой результат ...
PS - и эта констукция хорошо работает в данном случае, но не всегда ее можно применить ...
Ошибки не исчезают с опытом - они просто умнеют
|
heider |
|
Темы:
0
Сообщения:
83
Участник с: 09 декабря 2015
|
vasekПотому что echo в такой конструкции воспринимает вход не как один аргумент в виде большой строки, а как множество аргументов, состоящих из отдельных слов, разделенных разделителями (пробелами, табуляциями, переводами строк), и выводит на вывод все эти прочитанные аргументы ввиде списка через пробел. Но стоит заключить входящую строку в кавычки и на выход пойдет вся строка целиком вместе с лишними пробелами, табуляциями и переводами строк.
|
heider |
|
Темы:
0
Сообщения:
83
Участник с: 09 декабря 2015
|
Можно так протестировать. Три коротких аргумента Один длинный аргумент
|