【问题标题】:Replace string from previous command and execute [duplicate]替换上一个命令中的字符串并执行[重复]
【发布时间】: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_NAMEUSERNAME,但要保持一致。 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

标签: regex bash shell grep


【解决方案1】:

如果您想替换字符串的所有出现(开关g),您需要编写:

!!:gs/oldstring/newstring/

这将在您的最后一个命令中将 oldstring 替换为 newstring 运行它们存储结果历史。

否则:那么语法^oldstring^newstring^ 是一个快捷方式:

!!:s/oldstring/newstring/

只替换第一次发现的字符串。

【讨论】:

  • 谢谢。有没有办法跳过两次回车(即一次执行替换,再一次执行修改后的命令)?
  • 是的,但基于trap debug...看看这个答案:stackoverflow.com/a/16284715/1765658
猜你喜欢
  • 1970-01-01
  • 2017-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 2019-04-18
  • 2021-03-16
  • 1970-01-01
相关资源
最近更新 更多