所以我在研究tr
,并尝试使用以下命令:echo "test 123 new LINE" | tr -c 'A-Za-z' '[\n*]'
与echo "test 123 new LINE" | tr -c 'A-Za-z' '[\n]'
。以下是不同的输出:
> echo "test 123 new LINE" | tr -c 'A-Za-z' '[\n*]'
test
new
LINE
> echo "test 123 new LINE" | tr -c 'A-Za-z' '[\n]'
test]]]]]new]LINE]
如果不添加通配符,它似乎会将每一个新行替换为一个右括号字符。看一下手册页(https://linuxcommand.org/lc3_man_pages/tr1.html),它说对于参数[CHAR*],它“在SET2中,复制CHAR直到SET1的长度”。因此,很明显,它仍然基于SET2替换SET1中的字符,但它从哪里获得右括号?
与我的工作无关,所以没有必要告诉我关于sed或awk的事情,只是偶然发现了这个,很好奇。
1条答案
按热度按时间whitzsjs1#
在第二个命令中,替换集不是特殊格式
因此,它不会得到任何特殊处理,方括号会按原样处理,所以前两个非字母字符分别替换为
[
和\n
,所有其他字符替换为]
(因为替换集通过重复最后一个字符来扩展)。