Показать последние n строк вывода команды

Ваша команда попытается удалить $, за которым следует /в конце строк вашего файла.

Начальный $в регулярном выражении не нужен:

sed 's/\/$//' myfile.txt >myfile_noslash.txt

Команда подстановки sв sedможет принимать практически любой символ в качестве символа-разделителя, например

s@/$@@

или

s,/$,,

или

s|/$||

Таким образом, ваша команда может быть

sed 's,/$,,' myfile.txt >myfile_noslash.txt
2
15.07.2020, 21:42
2 ответа
#!/bin/sh
i=0
[ "$#" = 1 ] || { >&2 echo "The number of lines should be provided"; exit 9; }
nlines=$1
while IFS= read -r line; do
    clear
    all="$all
$line"
    i=$((i+1))
    if [ "$i" -ge "$nlines" ]; then
        all="${all#*
}"
    fi
    printf '%s\n' "$all"
done < /dev/stdin

Сделайте его исполняемым (chmod +x nlines.sh), а затем, чтобы непрерывно печатать только 3 строки,

docker build |./nlines.sh 3

  • clearочищает экран. Это делается всякий раз, когда строка поступает из стандартного ввода.

  • Это добавляет новую прочитанную строку к переменнойall:

all="$all
$line"
  • [ "$i" -ge "$nlines" ]проверяет, достигнуто ли максимальное количество отображаемых строк. Если да,

    • Это удаляет самую старую строку из переменной.
all="${all#*
}"
2
18.03.2021, 23:19

Попробуйте

docker build > logfile &
tail -3 -f logfile

-f делает то, что вы хотите, но не работает с каналами, поэтому нужен промежуточный файл.

-2
18.03.2021, 23:19

Теги

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