linux – 在zsh命令行中替换字符串

我使用zsh和emacs键绑定.有时我需要用不同的输入执行相同的命令.输入通常有共同的子串.是否有一种简单的方法可以用其他字符串替换以前命令的部分内容?例如,上一个命令是:

cat chr2.unknow.feature.filtered ../chr2.unknow.feature.filtered ../train/chr2.unknow.withpvalue.feature.filtered > chr2.combined.txt

我怎么能用’chr3’轻松替换’chr2’?

问题的扩展,如何将命令中的几个不同的子串替换为其他不同的字符串:

cat chr1.unknow.feature.filtered ../chr2.unknow.feature.filtered ../train/chr3.unknow.withpvalue.feature.filtered

如何用“chrX”代替“chr1”,用“chrZ”替换“chr2”,“chr3”?

谢谢.

你也可以使用^ old ^ new进行快速历史替换(比!!更快:s ^ old ^ new ^)

~ % cd /tmp
/tmp % ^tmp^etc  # <-- changes tmp for etc
/tmp % cd /etc
/etc % 

这只会改变第一次出现.如果您需要更多,请使用任何历史修饰符.示例:全局更改:

/etc % echo tmp tmp tmp
tmp tmp tmp
/etc % ^tmp^etc
/etc % echo etc tmp tmp  # <--- only the first tmp got changed
etc tmp tmp
/etc % ^tmp^etc^:G       # <-- 'global'

PS:在zshexpn手册中搜索^ foo ^ bar以查找描述此内容的部分.向下滚动一点(在手册中),您将看到“历史记录扩展修饰符”列表.

PS:对于多次替换,请执行:^ old1 ^ new1 ^:s ^ old2 ^ new2 ^等

翻译自:https://stackoverflow.com/questions/16221944/replace-strings-in-zsh-command-line

转载注明原文:linux – 在zsh命令行中替换字符串