【发布时间】:2015-06-18 20:01:36
【问题描述】:
是否可以在同一命令中将乘法模式更改为不同的值? 假设我有
A B C D ABC
我想将每个 A 更改为 1,每个 B 更改为 2,每个 C 更改为 3
所以输出将是
1 2 3 D 123
因为我有 3 种模式要更改,所以我想避免单独替换它们。 我以为会有类似的东西
sed -r s/'(A|B|C)'/(1|2|3)/
当然,这只是将 A 或 B 或 C 替换为 (1|2|3)。 我应该提一下,我的真实模式比这更复杂......
谢谢!
【问题讨论】:
-
为什么不
sed 's/A/1/g;s/B/2/g;s/C/3/g' file? -
如果是单个字母,您可以使用 tr
tr 'ABC' '123' -
什么是(未写入的)约束来避免多个
s///,尤其是在像@anubhava 问这样的复杂模式上? -
问题与副本的链接不完全相同。链接是这种情况的一个子案例,只有一些特定的简单模式可以用 uniq 新模式替换,其中这个问题在搜索和替换模式中更常见
-
如果您需要“单词”,您应该使用发布一个使用“单词”的示例,而不仅仅是字母,因为字母更简单(
tr)以及处理“单词”的正确方法实际上取决于“单词”对您意味着什么和/或“单词”之间的分隔符可以是什么。正如现在所写的那样,您的问题极有可能产生一个适用于您发布的输入的解决方案,但稍后在针对某些不同的输入运行时会失败(可能悄悄地和/或神秘地和/或灾难性地)。