如何从历史中复制命令?

时间:2009-03-22 02:33:41

标签: sed awk history

我尝试从历史记录中复制命令。如何复制第510个命令?请看下面的数据。我的赌注是:

history | grep 510 | sed '1q;d' | awk '{print $2-$10}' | pbcopy

但输出为0.我无法理解原因。命令有什么问题?

  505  find . -perm=750 -print0 | xargs -0 chmod 750
  506  find . --perm=750 -print0 | xargs -0 chmod 750
  507  find . -perm=750 -print0 | xargs -0 chmod 750
  508  find . -perm=750 -print0 | xargs -0 chmod 750
  510  find . -perm 750 -print0 | xargs -0 chmod 750
  512  history | grep perm 750 -print0 | pbcopy

4 个答案:

答案 0 :(得分:5)

如果你正在使用bash:

echo "!510" | pbcopy

(另见bash manual

中的“历史扩展”

答案 1 :(得分:1)

您可以使用perl打印所请求行的第一列(510)以外的所有内容:

history | perl -ane 'print "@F[1..$#F]" if($F[0]==510)'

答案 2 :(得分:1)

对于Awk中的一系列字段,您需要一个for循环。你正在做的是减法,因此是零的结果。

通常cut命令执行提取列的任务,但有时候Awk更合适。

这就是你的意思。

history | grep 510 | sed 1q \
 | awk '{for(i = 2; i <= NF; i++){ORS = (i == NF ? "\n" : " "); print $i;}}' \
 | pbcopy

答案 3 :(得分:0)

原因是$2$10不是awk脚本中的数字。字段的索引是从1开始的,所以如果你想要750,第一个是$5,第二个是$11

请注意,这与使用“-perm=750

的行不同