如何将命令历史记录中的最后一个命令传送到剪贴板?

时间:2014-06-23 18:52:31

标签: bash shell zsh

当谈到grep / awk / sed / cut时,我总是一个菜鸟,所以我需要帮助。我有这个:history | tail -n 1 | pbcopy返回1968* mv ~/iPhoto\ Library.zip ./ ; bell这很好,因为这是我运行的最后一个命令,但我需要在开头删除数字。我尝试了awkgrepsedcut的各种迭代,但就像我说的那样,当涉及到这些命令时,我就是一个菜鸟。我该怎么做?

3 个答案:

答案 0 :(得分:2)

你可以试试这个sed命令,

history | tail -n 1 | pbcopy | sed 's/^[0-9]\+//g'

通过awk,

history | tail -n 1 | pbcopy | awk '{sub(/^[0-9]+/,"")}1'

输出:

mv ~/iPhoto\ Library.zip ./ ; bell

答案 1 :(得分:1)

只需将输出传输到

awk '{for(i=2;i<NF;i++)printf "%s",$i OFS; if (NF) printf "%s",$NF; printf ORS}'

输出:

mv ~/iPhoto\ Library.zip ./ ; bell

答案 2 :(得分:0)

zsh中,您只需告诉history(这是fc -l的同义词),就不能使用-n打印数字。此外,您可以使用-1打印最后一个条目:

history -n -1 | pcopy
fc -l -n -1 | pcopy

bash history中没有此选项,但还有一个fc命令,它甚至支持所需的选项。不幸的是,&#39;压制命令号码&#39; (来自man 1 bash)似乎意味着打印TAB而不是&#39;,因此输出以TAB和空格开头,可以使用sed删除

fc -l -n -1 | sed 's/^\t //' | pcopy