我有一个文本文件,其中包含 aome ascii art。我试图让它在终端启动时打印到终端。我知道要这样做,我在 .bashrc 中添加 cat myfi 。我试图将 cat 的输出置于中心。我尝试使用 tput cols 失败。
谁能给我一些提示或者如果可能的话。
答案1
sed -e 's/^/ /' /path/to/ascii_art
如果空间不够,请调整空间。
答案2
一种方法是执行以下步骤:
- 获取终端的宽度
- 找到 ASCII 艺术文件中最长的行
- 取这些数字之间的差值并除以 2 以获得所需的缩进
- 打印 ASCII 艺术文件,每行缩进
这是一个示例脚本,用于awk
进行计算:
#!/bin/sh
input="$1"
twidth=$(tput cols)
echo terminal width is $twidth
indent=$(awk -v twidth=$twidth ' {
w=length();
if (w > fwidth) fwidth=w;
}
END {
indent=int((twidth-fwidth)/2);
print (indent > 0 ? indent : 0);
}' < "$input")
echo indent is $indent
awk -v indent=$indent '{ printf("%*s", indent, " "); print; }' < "$input"
这是对大字母 L 的测试:
$ cat /tmp/L
#
#
#
#
#
#
#######
$ ./center /tmp/L
terminal width is 81
indent is 37
#
#
#
#
#
#
#######
答案3
example.txt
:
praveen
ajay
现在我在开始使用 awk 添加 15 个空格来将内容放在中心。您需要根据要求增加空间数量
awk '{printf "%15s\n",$1}' example.txt
答案4
一种更具编程性的做事方式(水平和垂直居中):
以下内容可以放入“cat_center.sh”文件中:
#!/bin/bash
# Get file in variable
LOGO=$(cat "$1")
# Work out logo size
H_SIZE=0
V_SIZE=0
while IFS= read -r line; do
if [[ ${#line} -ge H_SIZE ]]; then
H_SIZE=${#line}
fi
V_SIZE=$((V_SIZE + 1))
done <<<"$LOGO"
#echo "Horizontal size : $H_SIZE"
#echo "Vertical size : $V_SIZE"
# Work out the horizontal offset
H_WIDTH=$(tput cols)
H_OFFSET=0
if ((H_WIDTH > H_SIZE)); then
H_OFFSET=$(((H_WIDTH - H_SIZE) / 2))
fi
#echo "Horizontal offset : $H_OFFSET"
# Work out the vertical offset
V_WIDTH=$(tput lines)
V_OFFSET=0
if ((V_WIDTH > V_SIZE)); then
V_OFFSET=$(((V_WIDTH - V_SIZE) / 2))
fi
#echo "Vertical offset : $V_OFFSET"
# Print the ascii art
clear
# Vertical offset : print spaces and convert to lines
printf '%*s' $V_OFFSET | tr ' ' '\n'
# Horizontal offset : print offset of spaces
while IFS= read -r line; do
printf "%"$H_OFFSET"s${line}\n"
done <<<"$LOGO"
用法:./cat_center.sh my_logo_file