Отображение содержимого текстового файла справа налево в терминале

Есть ли способ для перечисления содержимого файла в окне оболочки, так что символы печатаются справа налево, а не как обычно слева? или так, что алгоритм BIDI направляет направление линии в соответствии с текстом, присутствующим?

Это актуально при работе с текстовыми файлами, принадлежащими языкам RTL (а также смешанными документами RTL RTL), где вы хотите выполнить grep и search много без загрузки в редактор ... редакторам не нравятся огромные файлы ...

Что-то вокруг cat может быть приятным:)

На самом деле, может быть, я напишите что-то, что просто меняет каждую строку и трубы на cat, если ничего неизвестного не существует.

5
задан 6 December 2017 в 05:24

4 ответа

Ответ десерта уже охватывает утилиты, которые могут использоваться для изменения текста. Если бы мы хотели использовать инструменты только для оболочки, мы могли бы использовать расширение параметра ${variable:start:offset}, чтобы сначала отменить только строку, а затем создать скрипт, который выполняет это в каждой строке текстового файла.

Линия может быть изменена так:

#!/bin/bash length=${#1} pointer=$((length-1)) while [ $pointer -ge 0 ]; do printf "%c" "${1:$pointer:1}" pointer=$((pointer-1)) done printf "\n"

И она работает следующим образом:

$ ./reverse.sh "hello world" dlrow olleh

Чтобы отменить каждую строку в текстовом файле, мы могли бы сделайте это:

#!/bin/bash reverse_line(){ length=${#1} pointer=$((length-1)) while [ $pointer -ge 0 ]; do printf "%c" "${1:$pointer:1}" pointer=$((pointer-1)) done printf "\n" } while IFS= read -r line || [ -n "$line" ]; do reverse_line "$line" done < "$1"

Тест:

$ printf "hello world\nsecond line" > input.txt $ ./reverse_file_lines.sh input.txt dlrow olleh enil dnoces

Конечно, это не совсем переносимо, поскольку ${var:start:offset} является bash-специфичным, поэтому мы всегда можем прибегнуть к awk для переносимости:

awk '{for(i=length($0);i>0;i--) printf "%c",substr($0,i,1);print ""}' input.txt
3
ответ дан 18 July 2018 в 01:47

Взгляните на инструмент bicon, который обеспечивает BiDi над эмуляторами терминала.

3
ответ дан 18 July 2018 в 01:47

Ответ десерта уже охватывает утилиты, которые могут использоваться для изменения текста. Если бы мы хотели использовать инструменты только для оболочки, мы могли бы использовать расширение параметра ${variable:start:offset}, чтобы сначала отменить только строку, а затем создать скрипт, который выполняет это в каждой строке текстового файла.

Линия может быть изменена так:

#!/bin/bash length=${#1} pointer=$((length-1)) while [ $pointer -ge 0 ]; do printf "%c" "${1:$pointer:1}" pointer=$((pointer-1)) done printf "\n"

И она работает следующим образом:

$ ./reverse.sh "hello world" dlrow olleh

Чтобы отменить каждую строку в текстовом файле, мы могли бы сделайте это:

#!/bin/bash reverse_line(){ length=${#1} pointer=$((length-1)) while [ $pointer -ge 0 ]; do printf "%c" "${1:$pointer:1}" pointer=$((pointer-1)) done printf "\n" } while IFS= read -r line || [ -n "$line" ]; do reverse_line "$line" done < "$1"

Тест:

$ printf "hello world\nsecond line" > input.txt $ ./reverse_file_lines.sh input.txt dlrow olleh enil dnoces

Конечно, это не совсем переносимо, поскольку ${var:start:offset} является bash-специфичным, поэтому мы всегда можем прибегнуть к awk для переносимости:

awk '{for(i=length($0);i>0;i--) printf "%c",substr($0,i,1);print ""}' input.txt
3
ответ дан 24 July 2018 в 17:27
  • 1
    Ссылка на объяснение перенаправления файлов очень интересная! – Charles Green 5 December 2017 в 20:37
  • 2
    @CharlesGreen Да, это касается почти каждой записи Chazelas на U & amp; L и именно поэтому я включил ее здесь. Мы все можем только учиться у него. – dessert 5 December 2017 в 20:39
  • 3
    @dessert: Знаете ли вы о этом эффекте ? tset - плохая идея для этих примеров :) – pa4080 5 December 2017 в 20:51
  • 4
    @ pa4080 проблема решена. – dessert 5 December 2017 в 21:00
  • 5
    AFAIK для многих языков RTL существует связь между символом с его предыдущими символами (например, на арабском языке, где форма персонажа зависит от того, где он находится на слове), поэтому простое изменение символов не будет работать – phuclv 6 December 2017 в 07:14

Взгляните на инструмент bicon, который обеспечивает BiDi над эмуляторами терминала.

3
ответ дан 24 July 2018 в 17:27

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

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