当我运行命令$ echo "Hello, World!" | tr -c 'aeiou' '*'时,终端返回*e**o***o*****。在最后一个元音o之后只有4个字符,所以tr应该用*替换每个字符以返回*e**o***o****,但它在输出字符串中添加了一个*,这对我来说似乎不合逻辑。我也尝试了$ echo "o!" | tr -c 'aeiou' '*',但它仍然返回o**而不是o*。有没有人可以帮我了解一下原因?
$ echo "Hello, World!" | tr -c 'aeiou' '*'
*e**o***o*****
o
tr
*
*e**o***o****
$ echo "o!" | tr -c 'aeiou' '*'
o**
o*
a8jjtwal1#
echo 'o!'输出三个字符:o、!和换行。
echo 'o!'
!
$ echo 'o!' | od -t c 0000000 o ! \n 0000003
字符串printf 'o!'只输出前两个。
printf 'o!'
$ printf 'o!' | od -t c 0000000 o ! 0000002
型或者,您可以使用tr -c 'aeiou\n' '*'(至少在我的系统上)保留换行。
tr -c 'aeiou\n' '*'
1条答案
按热度按时间a8jjtwal1#
echo 'o!'
输出三个字符:o
、!
和换行。字符串
printf 'o!'
只输出前两个。型
或者,您可以使用
tr -c 'aeiou\n' '*'
(至少在我的系统上)保留换行。