Ищу способ просмотра строк текстового файла по одной в центре экрана

Что-то вроде этого:

^.*\/(.*)_SPINK.*$

К сожалению, у меня нет доступа к Informatica для тестирования, но sedсогласен:

echo '/test_files/infa_test/nippy/SrcFiles/JUNK/JUNK_OPS_SPINK_PAE_01-01-01-01-01-99.csv' |
sed -E 's/^.*\/(.*)_SPINK.*$/\1/'

Это дает JUNK_OPS.

В зависимости от того, как работает REG_EXTRACT, его можно сократить до

.
\/([^/]*)_SPINK
8
16.03.2020, 18:38
3 ответа

Примерно так:

#!/usr/bin/env bash

if [ ! "$#" -eq 1 ]
then
    printf "Usage: %s <file>\n" "$0" >&2
    exit 1
fi

file="$1"

display_center(){
    clear
    columns="$(tput cols)"
    lines="$(tput lines)"
    down=$((lines / 2))
    printf '\n%.0s' $(seq 1 $down)
    printf "%*s\n" $(( (${#1} + columns) / 2)) "$1"
}

while IFS= read -r line
do
    display_center "$line"
    read -n 1 -s -r </dev/tty
done < "$file"

Назовите его centered.shи используйте так:

./centered.sh centered.sh

Будет напечатана каждая строка из данного файла. Нажмите любую клавишу, чтобы показать следующая строка. Обратите внимание, что он еще недостаточно протестирован, поэтому используйте его с осторожностью. и что он всегда будет печатать строки, начинающиеся с центра экрана, поэтому он будет сделайте длинные линии более заметными внизу.

Первая строка:

#!/usr/bin/env bash

это шебанг . Кроме того, я использую envдля его особенности . Я пытался избежать Bash и написать этот скрипт в оболочке POSIX, но я сдался, потому что особенно readбыл очень проблематичным. Вы должны держать в Имейте в виду, что хотя может показаться, что Bash вездесущ, это не так. предустановлен везде по умолчанию, например на BSD или small embedded системы с Busybox.

В этой части:

if [ ! "$#" -eq 1 ]
then
    printf "Usage: %s <file>\n" "$0" >&2
    exit 1
fi

мы проверяем, указал ли пользователь ровно один параметр, и если нет, мы печатаем информацию об использовании в стандартную ошибку и вернуть 1, что означает ошибку для родительский процесс.

Здесь

file="$1"

мы назначаем параметр имени файла, который пользователь передал переменной file, который мы будем использовать позже.

Это функция, которая печатает текст по центру:

display_center(){
    clear
    columns="$(tput cols)"
    lines="$(tput lines)"
    down=$((lines / 2))
    printf '\n%.0s' $(seq 1 $down)
    printf "%*s\n" $(( (${#1} + columns) / 2)) "$1"
}

В Bash нет прототипов функций, поэтому вы не можете знать, сколько функция параметров принимает заранее -, что принимается только один параметр, который представляет собой строку для печати и разыменовывается с помощью $1. Эта функция сначала очищает экран,затем перемещается вниз на строки / 2 от верхней части экрана, чтобы достичь центр экрана, а затем печатает центральную линию, используя метод Я позаимствовал из здесь .

Это цикл, который считывает входной файл, переданный пользователем, и вызывает display_center()функция:

while IFS= read -r line
do
    display_center "$line"
    read -n 1 -s -r </dev/tty
done < "$file"

readиспользуется с -n 1для чтения только одного символа, -sдля эхо-вход, поступающий с терминала, и -rпредотвращают искажение обратная косая черта . Ты подробнее о readможно узнать в help read. Мы также читаем из /dev/tty напрямую, потому что стандартный ввод уже указывает на файл -, если мы не говорил readчитать из /dev/tty, скрипт очень быстро вывести все строки из файла и выйти сразу, не дожидаясь пользователю нажать клавишу.

12
28.04.2021, 23:20

Вы можете сделать это с пакетом dialog:

file=lorem                             #Path to the file to be displayed
ln=1                                   #Current line number to be displayed
nlines=$(wc -l "$file"|cut -f1 -d" ")  #Total number of lines of file
while [ "$ln" -le "$nlines" ]; do
    line=$(sed -n "$ln p" "$file")     #sed gets current line
    if dialog --yes-label Previous --no-label Next \
    --default-button no --yesno "$line" 5 100; then
        ln=$((ln-1))
    else
        ln=$((ln+1))
    fi
done

Это текстовая -презентация (Я серьезно отнесся к "голым -слайд-шоу костей"! ), не требуется сеанс X, отображающий по одной строке за раз. Вы можете идти назад или вперед, и он заканчивается после последней строки.

5
28.04.2021, 23:20

Вот навороченный -вкладыш:

sed ':a;s/^.\{1,77\}$/ &/;ta;s/\( *\)\1/\1/; s/.*/\n\n\n\n\n\n\n\n\n\n\n&\n\n\n\n\n\n\n\n\n\n\n/' < input.txt | more

Это предполагает окно терминала 80x24. Команда sedцентрирует каждую строку текста, а затем добавляет достаточное количество начальных и конечных новых строк для вертикального центрирования. Команда moreпозволяет пользователю листать страницы.

1
28.04.2021, 23:20

Теги

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