如何使用 tr REPEAT 修饰符将字符替换为重复字符?

如何使用 tr REPEAT 修饰符将字符替换为重复字符?

我正在使用该tr命令将换行符替换为另一个命令输出中的制表符,并且我希望有多个制表符以更好地将输出与柱状格式对齐。

我看到tr有一个[CHAR*REPEAT]选项,其中REPEAT可能是十进制或八进制值,但我无法让它工作,例如以下简单的行:

echo "1234" | tr ['2'] ['x'*3]

给出:

1x34

当我期待时:

1xxx34

正确的语法是什么?

答案1

恐怕您误解了“重复”选项的含义。

tr正如您正确推断的那样,用于翻译字符集。你可以用选项来调用它

t设置1 设置2

这个想法是两个集合都可以包含多个字符,即你可以说

tr 'abc' 'def'

它将a用 a替换 every db用 an 替换every ec用 an 替换every f。现在,有时您想用相同的“输出”字符替换多个“输入”字符,例如

tr 'abcdefghij' 'xxxxxxxxyz'

这将替换ato hwith xiwithyjwith z。 “重复”功能的目的是让编写变得不那么麻烦,这样你就可以编写

tr 'abcdefghij' '[x*8]yz'

作为简写。不幸的是,这意味着它不是为您想要做的事情而设计的。

反而, 你可以试试sed

$ echo "1234" | sed 's/2/xxx/g'
1xxx34

这会将 ( s) 所有出现的地方(尾部g)替换2xxx。因为sed比这更强大(看看标记为的问题对于可能发生的事情的概述),无论如何看看可能是个好主意。

相关内容