Есть ли способ для перечисления содержимого файла в окне оболочки, так что символы печатаются справа налево, а не как обычно слева? или так, что алгоритм BIDI направляет направление линии в соответствии с текстом, присутствующим?
Это актуально при работе с текстовыми файлами, принадлежащими языкам RTL (а также смешанными документами RTL RTL), где вы хотите выполнить grep и search много без загрузки в редактор ... редакторам не нравятся огромные файлы ...
Что-то вокруг cat может быть приятным:)
На самом деле, может быть, я напишите что-то, что просто меняет каждую строку и трубы на cat, если ничего неизвестного не существует.
Ответ десерта уже охватывает утилиты, которые могут использоваться для изменения текста. Если бы мы хотели использовать инструменты только для оболочки, мы могли бы использовать расширение параметра ${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
Взгляните на инструмент bicon, который обеспечивает BiDi над эмуляторами терминала.
Ответ десерта уже охватывает утилиты, которые могут использоваться для изменения текста. Если бы мы хотели использовать инструменты только для оболочки, мы могли бы использовать расширение параметра ${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
Взгляните на инструмент bicon, который обеспечивает BiDi над эмуляторами терминала.