wat*_*ery 4 shell text-processing tr
我正在使用该tr命令用另一个命令的输出中的制表符替换换行符,并且我希望有多个制表符以更好地将输出对齐到柱状格式。
我看到tr有一个[CHAR*REPEAT]选项,其中REPEAT可能是十进制或八进制值,但我无法让它工作,例如以下简单行:
echo "1234" | tr ['2'] ['x'*3]
Run Code Online (Sandbox Code Playgroud)
给出:
1x34
Run Code Online (Sandbox Code Playgroud)
虽然我期待:
1xxx34
Run Code Online (Sandbox Code Playgroud)
要使用的正确语法是什么?
恐怕您误解了“重复”选项的含义。
tr,正如您正确推断的那样,用于翻译字符集。你用选项调用它
tr set1 set2
这个想法是两个集合都可以包含多个字符,即你可以说
tr 'abc' 'def'
Run Code Online (Sandbox Code Playgroud)
它将取代每a一个d,每b有一个e,每c有一个f。现在,有时您想用相同的“输出”字符替换多个“输入”字符,例如
tr 'abcdefghij' 'xxxxxxxxyz'
Run Code Online (Sandbox Code Playgroud)
这将替换a为hwith x、iwithy和jwith z。"repeat" 函数是为了让写这个不那么麻烦,这样你就可以写
tr 'abcdefghij' '[x*8]yz'
Run Code Online (Sandbox Code Playgroud)
作为速记。不幸的是,这意味着它不是为您打算做的事情而设计的。
相反,您可以尝试sed
$ echo "1234" | sed 's/2/xxx/g'
1xxx34
Run Code Online (Sandbox Code Playgroud)
这将替换 ( s) 的所有出现(尾随g)2with xxx。由于sed比这更强大(查看标记为sed的问题以了解可能的内容),因此无论如何查看一下可能是个好主意。
| 归档时间: |
|
| 查看次数: |
277 次 |
| 最近记录: |