Ваша команда попытается удалить $
, за которым следует /
в конце строк вашего файла.
Начальный $
в регулярном выражении не нужен:
sed 's/\/$//' myfile.txt >myfile_noslash.txt
Команда подстановки s
в sed
может принимать практически любой символ в качестве символа-разделителя, например
s@/$@@
или
s,/$,,
или
s|/$||
Таким образом, ваша команда может быть
sed 's,/$,,' myfile.txt >myfile_noslash.txt
#!/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#*
}"
Попробуйте
docker build > logfile &
tail -3 -f logfile
-f делает то, что вы хотите, но не работает с каналами, поэтому нужен промежуточный файл.