我希望使用tr将数字0-5替换为A,将数字6-9替换为B。
我试着使用sed来完成这个任务:
sed 's/[0-4]/</; s/[6-9]/>/' 但是,它只能工作一次,因此,例如,如果我编写123,它只会附带A23而不是AAA。
发布于 2020-06-15 14:05:46
对于sed,您需要添加g,以便它将替换每一行中的所有事件:
sed 's/[0-4]/A/g;s/[5-9]/B/g'使用tr,您可以链接两个trs:
tr '0-4' A | tr '6-9' B或者显式地提供字符转换:
tr 0123456789 AAAAABBBBB甚至:
tr 0-45-9 AAAAABBBBB(但我发现后者的可读性较低,因为1-1映射不是立即可见的)。
重复的Bs可以缩写(tr在必要时重复最后一个字符),范围可以合并:
tr 0123456789 AAAAAB
tr 0-9 AAAAAB对于更复杂的替换,拆分命令可以帮助使其目的更加明显:
tr 0123456789 \
AAAAABBBBB或者,利用引用的范围与此场景中的扩展长度匹配的事实:
tr '0-4''5-9' \
AAAAABBBBB我假设范围拆分为0-4和5-9,以均匀分割,如sed示例的第一个命令所示。范围可以根据需要进行调整。
发布于 2020-06-15 14:05:49
在结尾处使用/g量词对所有字符应用全局替换。如果没有它,替换将在第一次匹配字符时结束,并将不会随后进行。
另一种方法是使用sed来音译可同时使用的GNU和POSIX字符(类似于tr)。
sed 'y/123456789/AAAAABBBB/'发布于 2020-06-15 17:57:30
假设范围为0-4和5-9:
tr 0-9 AAAAAB或
sed y_0123456789_AAAAABBBBB_https://unix.stackexchange.com/questions/593035
复制相似问题