Например, меньше позволяет вам читать строки за строкой, начиная с самого начала. Есть ли аналогичная утилита или строка, которая может быть запущена в терминале, который может отображать обратный символ по символу? Если нет, как насчет утилиты «cat», которая отображает весь файл назад символом?
Вы можете использовать только GNU tac для чтения файла по-символьному символу, указав «разделитель записи», который соответствует каждому символу:
# Reverse a file character by character.
# From http://www.gnu.org/software/coreutils/tac
tac -r -s 'x\|[^x]' input_file
-s указывает пользовательский разделитель записи (вместо новой строки) и -r обрабатывает строку разделителя как регулярное выражение.
Это отличается от ответов с помощью tac | rev, поскольку фактически отменяет порядок символов в файле, включая новые строки, и работает корректно, даже если последняя строка не заканчивается в новой строке.
% printf 'Hello\nworld\n' | tac | rev | xxd
0000000: 646c 726f 770a 6f6c 6c65 480a dlrow.olleH.
% printf 'Hello\nworld\n' | tac -r -s 'x\|[^x]' | xxd
0000000: 0a64 6c72 6f77 0a6f 6c6c 6548 .dlrow.olleH
В пакете GNU coreutils имеется утилита с именем tac. Это линейная программа, поэтому она выводит каждую строку на стандартный вывод, последняя строка сначала - в отличие от каждого символа.
Команда rev (из пакета util-linux) основана на символах и он печатает каждую строку до стандартного вывода, изменяя порядок символов в каждой строке.
Два разных подхода с использованием Perl:
1:
perl -e 'while($c=getc){$s=$c.$s};print($s)' <input
2:
perl -F'' -0777ae 'print(reverse(@F))' <input
1:
[ f4]: выполняет следующий аргумент; while($c=getc){$s=$c.$s}: сохраняет возвращаемое значение getc в $c и добавляет $c к $s, пока возвращаемое значение $c не будет определено; print($s): печать $s.2:
-e: выполняет следующий аргумент: -0777ae: устанавливает разделитель входных данных на недопустимый символ (это предотвращает Perl от разбиение записей), разделяет поля ввода, сохраняя их в F, и выполняет скрипт, переданный в качестве аргумента; while($c=getc){$s=$c.$s}: сохраняет возвращаемое значение getc в $c и добавляет $c к $s, пока возвращаемое значение $c не будет определено,% cat input
For instance, less allows you to read line by line, starting from the beginning.
Is there a similar utility or line that could be run in the terminal that could display a file backward character by character?
If not, how about a "cat" like utility that displays the entire file backward by character?
% perl -e 'while($c=getc){$s=$c.$s};print($s)' <input
?retcarahc yb drawkcab elif eritne eht syalpsid taht ytilitu ekil "tac" a tuoba woh ,ton fI
?retcarahc yb retcarahc drawkcab elif a yalpsid dluoc taht lanimret eht ni nur eb dluoc taht enil ro ytilitu ralimis a ereht sI
.gninnigeb eht morf gnitrats ,enil yb enil daer ot uoy swolla ssel ,ecnatsni roF
% perl -F'' -0777ae 'print(reverse(@F))' <input
?retcarahc yb drawkcab elif eritne eht syalpsid taht ytilitu ekil "tac" a tuoba woh ,ton fI
?retcarahc yb retcarahc drawkcab elif a yalpsid dluoc taht lanimret eht ni nur eb dluoc taht enil ro ytilitu ralimis a ereht sI
.gninnigeb eht morf gnitrats ,enil yb enil daer ot uoy swolla ssel ,ecnatsni roF
]