我最喜欢的 Unix 技巧之一是^x^y,它将采用最后一个命令并将“x”的第一个实例替换为“y”。但是,我想知道是否有类似的技巧可以在最后一个命令中用“y”替换“x”的所有实例?
题
假设我刚刚输入此命令来计算包含特定字符串的行数:
me@machine $ command-producing-multi-line-output | grep -i "needle" | wc -l
Run Code Online (Sandbox Code Playgroud)
现在我怎么能快速"needle"用其他词代替?
当前低效的解决方案
现在我:
Up键盘以加载最后一个命令。Left或Ctrl+Left直到到达"needle"。Backspace或Ctrl+w删除单词。Enter。这似乎非常低效。
尝试的非工作解决方案
我试图研究历史捷径,如!!:sg/needle/new-needle;但这有几个问题:
Up把!!:sg/needle/new-needle后面的命令行上。这样做只会显示它扩展到的内容(直接回到原始问题)。needle和new-needle(即!!:sg/new-needle-from-before/yet-another-new-needle)。needle而不是使用类似!:4或$4(即!!:sg/!:4/new-needle或!!:sg/$4/new-needle)之类的东西来节省时间/击键。我也发现了类似!:^-3 "new-needle" !:5-$但也有问题的东西:
我相信必须有一些超快速的方法来做我想做的事情,而且那里的一些 linux 专家知道这一点。如果您对此有任何意见或建议,我将不胜感激。
编辑:
背景 …
我试过这样做:
echo " mv /server/today/logfile1 /nfs/logs/ && gzip /nfs/logs/logfile1" | sed 's|logfile1|logfile2|g'
Run Code Online (Sandbox Code Playgroud)
它打印:
mv /server/today/logfile2 /nfs/logs/ && gzip /nfs/logs/logfile2
Run Code Online (Sandbox Code Playgroud)
这是一个 bash 命令。我怎样才能让它被执行,而不仅仅是打印它?