我正在使用该tr
命令将换行符替换为另一个命令输出中的制表符,并且我希望有多个制表符以更好地将输出与柱状格式对齐。
我看到tr
有一个[CHAR*REPEAT]
选项,其中REPEAT
可能是十进制或八进制值,但我无法让它工作,例如以下简单的行:
echo "1234" | tr ['2'] ['x'*3]
给出:
1x34
当我期待时:
1xxx34
正确的语法是什么?
答案1
恐怕您误解了“重复”选项的含义。
tr
正如您正确推断的那样,用于翻译字符集。你可以用选项来调用它
t设置1 设置2
这个想法是两个集合都可以包含多个字符,即你可以说
tr 'abc' 'def'
它将a
用 a替换 every d
,b
用 an 替换every e
,c
用 an 替换every f
。现在,有时您想用相同的“输出”字符替换多个“输入”字符,例如
tr 'abcdefghij' 'xxxxxxxxyz'
这将替换a
to h
with x
、i
withy
和j
with z
。 “重复”功能的目的是让编写变得不那么麻烦,这样你就可以编写
tr 'abcdefghij' '[x*8]yz'
作为简写。不幸的是,这意味着它不是为您想要做的事情而设计的。
反而, 你可以试试sed
$ echo "1234" | sed 's/2/xxx/g'
1xxx34
这会将 ( s
) 所有出现的地方(尾部g
)替换2
为xxx
。因为sed
比这更强大(看看标记为的问题sed对于可能发生的事情的概述),无论如何看看可能是个好主意。