【发布时间】:2013-04-30 05:11:22
【问题描述】:
我想知道纠正先前执行命令中错误的最短命令。
鉴于我执行了以下命令
cd /Users/USERNAME/Library/Preferences/ByHost
我希望能够执行一个新命令,该命令采用前一个命令,通过grep 或类似的 Unix 工具对其进行管道传输,然后执行。在(我承认没有受过教育的)伪命令中会出现这样的情况。
!! | xargs 's/$1/USERNAME/cirrostratus/g'
这个命令会执行
cd /Users/cirrostratus/Library/Preferences/ByHost
另外,对字符串进行管道化、搜索和替换并在一行中执行将是我的第二选择。
【问题讨论】:
-
选择
USER_NAME或USERNAME,但要保持一致。grep用于查找文本;sed用于更改文本;awk可用于更改文本,但对于该场景来说可能是过度杀伤力。您希望cd /Users/USER_NAME/Library/Preferences/ByHost命令成功吗?cd是一个内置命令,它在某些方面使事情复杂化。你为什么不直接cd ~cirrostratus/Library/Preferences/ByHost?是否:cd $(echo $_ | sed 's/USERNAME/cirrostratus/')为您完成这项工作? -
在脚本中,还是在命令行中?
-
@tripleee 在命令行中支持。
-
Jonathan,使用
cd只是一个毫无意义的例子——我知道它是内置的,这是我小时候学到的第一个命令。我每周在 zsh 或 bash 中执行数千次命令,对我刚刚在上一个命令中犯的错误进行微优化会随着时间的推移对我有所帮助,并且感觉 IMO 比将光标移到更正错误上更干净。cd $(echo $_ | sed 's/USERNAME/cirrostratus/')在这种情况下不起作用,因为我的目标是纠正错误(错字、错误的复制粘贴等)。感谢信息回复:grep 不替换文本。 -
你可以看看这个答案:stackoverflow.com/a/16284715/1765658