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

perlを使用して510、要求された行の最初の列()以外のすべてを印刷できます。

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

その理由は、awkスクリプトの数字ではない$2ためです。$10フィールドのインデックスは1ベースであるため、必要に応じて750、最初のインデックスは、、 $52番目のインデックスはです$11

-perm=750これは「 」の行とは異なることに注意してください

于 2009-03-22T02:38:04.887 に答える