我尝试从历史记录中复制命令。如何复制第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
答案 0 :(得分:5)
答案 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
”