0

我尝试从历史记录中复制命令。如何复制第 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

4 回答 4

5

如果您使用的是 bash:

echo "!510" | pbcopy

(另见bash 手册中的“历史扩展” )

于 2009-03-22T02:43:31.957 回答
1

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

history | perl -ane 'print "@F[1..$#F]" if($F[0]==510)'
于 2009-03-22T02:37:56.493 回答
1

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

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

这就是你的意思。

history | grep 510 | sed 1q \
 | awk '{for(i = 2; i <= NF; i++){ORS = (i == NF ? "\n" : " "); print $i;}}' \
 | pbcopy
于 2009-03-23T15:58:32.037 回答
0

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

请注意,这与带有“ -perm=750”的行不同

于 2009-03-22T02:38:04.887 回答