Например, меньше позволяет Вам читать линию за линией, запускающийся с начала. Существует ли подобная утилита или строка, которая могла быть выполнена в терминале, который мог отобразить файл обратный символ символом? В противном случае как насчет "кошки" как утилита, которая отображает весь файл назад символом?
это делает это:
cat /tmp/aa | tac | rev
, где tac инвертирует файл, линию за линией сохраняющий символы в целости... затем, газуют, разрушает его путем простого инвертирования символов каждой данной строки, оставляющей линию за линией неповрежденным.. так, например:
cat /tmp/aa
Is there a way to read characters backwards from the end of a file in the terminal?
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?
cat /tmp/aa | tac | rev
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
lanimret eht ni elif a fo dne eht morf sdrawkcab sretcarahc daer ot yaw a ereht sI
Можно использовать один только 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
There’s утилита, названная tac
от пакета GNU coreutils
. It’s основанная на строке программа, таким образом, это печатает каждый строка к стандартному выводу, последняя строка первый †“в противоположность каждому символу.
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:
-e
: выполняет следующий аргумент;while($c=getc){$s=$c.$s}
: хранит возвращаемое значение getc
в $c
и предварительно ожидает $c
кому: $s
до возвращаемого значения $c
не не определено;print($s)
: печать $s
. 2:
-F''
: сбрасывает разделитель поля ввода (это делает поля разделения Perl на любом символе);-0777ae
: устанавливает входной разделитель записей на недопустимый символ (это препятствует тому, чтобы Perl разделил записи), разделяет поля входа, хранящего их в F
и выполняется, сценарий передал как аргумент;print(reverse(@F))
: печатает элементы массива, содержащего элементы F
в обратном порядке;% 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