pim*_*man 5 sed text-processing tr
我想用tr
替换数字0-5
与A
和数字6-9
用B
。
我试过sed
这样做:
sed 's/[0-4]/</; s/[6-9]/>/'
Run Code Online (Sandbox Code Playgroud)
它只工作一次,例如,如果我写123
它只会附带A23
而不是AAA
.
使用sed
,您需要添加,g
以便它替换每一行上出现的所有内容:
sed 's/[0-4]/A/g;s/[5-9]/B/g'
Run Code Online (Sandbox Code Playgroud)
使用tr
,您可以链接两个tr
s:
tr '0-4' A | tr '6-9' B
Run Code Online (Sandbox Code Playgroud)
或明确提供字符转换:
tr 0123456789 AAAAABBBBB
Run Code Online (Sandbox Code Playgroud)
甚至:
tr 0-45-9 AAAAABBBBB
Run Code Online (Sandbox Code Playgroud)
(但我发现后者不太可读,因为 1-1 映射不是立即可见的)。
重复的B
s 可以缩写(tr
根据需要重复最后一个字符),并且可以合并范围:
tr 0123456789 AAAAAB
tr 0-9 AAAAAB
Run Code Online (Sandbox Code Playgroud)
对于更复杂的替换,拆分命令可以帮助使其目的更加明显:
tr 0123456789 \
AAAAABBBBB
Run Code Online (Sandbox Code Playgroud)
或者,利用引用范围与这种情况下的扩展长度相匹配的事实:
tr '0-4''5-9' \
AAAAABBBBB
Run Code Online (Sandbox Code Playgroud)
我假设范围拆分为 0-4 和 5-9,以便均匀拆分,如sed
示例的第一个命令所示。可以根据需要调整范围。