Существует ли способ считать символы назад от конца файла в терминале?

Например, меньше позволяет Вам читать линию за линией, запускающийся с начала. Существует ли подобная утилита или строка, которая могла быть выполнена в терминале, который мог отобразить файл обратный символ символом? В противном случае как насчет "кошки" как утилита, которая отображает весь файл назад символом?

3
задан 30 October 2015 в 02:31

4 ответа

это делает это:

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
6
ответ дан 1 December 2019 в 13:09

Можно использовать один только 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
3
ответ дан 1 December 2019 в 13:09

There’s утилита, названная tac от пакета GNU coreutils. It’s основанная на строке программа, таким образом, это печатает каждый строка к стандартному выводу, последняя строка первый †“в противоположность каждому символу.

rev команда (от util-linux пакет) символьно-ориентирована, и это печатает каждую строку к стандартному выводу, инвертируя порядок символов в каждой строке.

1
ответ дан 1 December 2019 в 13:09

Два разных подхода с помощью 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
0
ответ дан 1 December 2019 в 13:09

Другие вопросы по тегам:

Похожие вопросы: