Как отобразить текст на терминале с указанным номером строки и путем к файлу? - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть список строк вида

file:starting linenumber:starting column number:ending linenumber:ending column number

, которые указывают область текста в заданных файлах; например

/home/user/Desktop/helloworld.c:10:5:10:15

Как эффективно отобразить на экране соответствующие строки в helloworld. c? Я вполне уверен, что это выполнимо с головой / хвостом, но я не слишком уверен в его производительности на больших файлах. Если есть способ «покрасить» область текста с помощью раскраски, об этом было бы неплохо узнать.

1 Ответ

1 голос
/ 09 апреля 2020

Для одной строки формата file:startRow:startCol:endRow:endCol используйте следующую функцию bash, чтобы напечатать ссылочные строки и выделить ссылочный текст:

highlight() {
    IFS=: read -r file srow scol erow ecol <<< "$1"
    shl=$'\033[31m' # start highlight, in this case red text
    ehl=$'\033[0m'  # end highlight, in this case normal text
    sed -n "$erow s/./&$ehl/$ecol;$srow s/./$shl&/$scol;$srow,$erow p;$erow q" "$file"
}

Пример использования:

seq -w 1 10000 > file
highlight file:2:4:5:1

печатает

output: highlighted text

Для обработки списка / файла с несколькими file:startRow:startCol:endRow:endCol используйте функцию внутри al oop:

IFS= read -r line; do
    highlight "$line"
done < list

Это не самый эффективный подход, поскольку один и тот же файл может быть прочитан несколько раз. Тем не менее, это, вероятно, достаточно эффективно. Я сомневаюсь, что вы заметите какие-либо задержки, даже с большим количеством больших файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...