less -U
делает текст неразборчивым. Альтернативой может быть предварительная обработка текста для использования комбинирующих символов Юникода для выделения жирного шрифта и подчеркивания. Например, использование U + 0332 для подчеркивания и жирного шрифта, представленного в виде двойного подчеркивания с U + 0333.
Вы можете создать сценарий upager
, например:
#! /bin/bash -
ul=$'\u0332' bold=$'\u0333' bs=$'\b'
sed "s/\(.\)$bs\1/\1$bold/g;s/_$bs\(.\)/\1$ul/g" | less
Затем:
export MANPAGER=upager
man bash
будет отображать как:
r̳e̳a̳d̳ [-̳e̳r̳s̳] [-̳a̳ a̲n̲a̲m̲e̲] [-̳d̳ d̲e̲l̲i̲m̲] [-̳i̳ t̲e̲x̲t̲] [-̳n̳ n̲c̲h̲a̲r̲s̲]
[-̳N̳ n̲c̲h̲a̲r̲s̲] [-̳p̳ p̲r̲o̲m̲p̲t̲] [-̳t̳ t̲i̲m̲e̲o̲u̲t̲] [-̳u̳ f̲d̲] [n̲a̲m̲e̲ ...]
One line is read from the standard input, or from
the file descriptor f̲d̲ supplied as an argument to
И вы можете выполнить поиск по тексту, выделенному жирным или подчеркнутым
на / читать
, например.
Не все эмуляторы терминала, похоже, правильно отображают эти комбинируемые символы. Я обнаружил, что консоль
пока дает наилучшие результаты.
Другой и, возможно, лучший подход, который также работает в xterm
, может заключаться в сохранении форматирования roff, но при добавлении каждого полужирного шрифта или подчеркивания к невидимому символу. Таким образом, вы можете искать обычное чтение
с помощью / чтение
и жирное / подчеркнутое чтение
с помощью / чтение
, как указано выше, при форматировании не затронут.
Невидимые символы, такие как U + 200B, пространство нулевой ширины, отображаются как меньше
как
, поэтому не являются вариантом. Тем не менее, персонаж, который, похоже, работает, - это U + 034F Объединяющий объединяющий графем . Этот комбинированный символ невидим и обычно не влияет, по крайней мере, на английский текст.
Таким образом, вы можете создать пейджер gcjpager
, например:
#! /bin/bash -
cgj=$'\u34f' bs=$'\b'
sed "s/.$bs./&$cgj/g" | less
(и export MANPAGER = / path / to / gcjpager
).
Сначала измените «/» в пробелах и выполните сортировку
sed 's|/| |' data | sort -k1,1n -k2,2n >out.tmp
Затем выведите следующие даты до и предыдущие после
awk -v m=4 -v d=7 '$1 > m || $1 == m && $2 >= d' out.tmp
awk -v m=4 -v d=7 '$1 < m || $1 == m && $2 < d' out.tmp
Может быть, что-то вроде:
date +'%m/%d 0000' |
sort -nt/ -k1 -k2 - birthdays.txt |
awk '$2 == "0000" {past_today = 1; next}
past_today {print; next}
{next_year = next_year $0 RS}
END {printf "%s", next_year}'
То есть вставить строка 04/07 0000
( date +% - m /% - d
выведет 4/7
с некоторыми реализациями date
, но не переносится, и 04/07
работает так же) перед сортировкой по дате, а затем awk
переместите строки, которые находятся перед этой, в конец.
sort ... - birthdays.txt
сортирует как свой стандартный ввод (представленный -
, здесь канал, который вводится по дате
), так и содержимое Birthdays.txt
.
Мы устанавливаем разделитель ключей на /
с помощью -t /
, -k1
указывает ключ сортировки, который выполняется от начала до конца строки (в по сути, -k1
указывает всю строку как ключ сортировки), а -k2
ключ сортировки, который начинается с первого символа после первого /
до конец строки, но с -n
они интерпретируются как числа, поэтому имеет значение только начальная последовательность цифр.
(приведенное выше будет работать с любой оболочкой типа Bourne (включая bash
), не нужно устанавливать только для этого bash
).