Question

J'essaie de copier une commande de l'histoire. Comment puis-je copier la commande 510ème? S'il vous plaît, voir les données ci-dessous. Mon pari est:

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

mais la sortie est 0. Je ne comprends pas la raison. Quel est le problème dans la commande?

  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
Était-ce utile?

La solution

Si vous utilisez bash:

echo "!510" | pbcopy

(Voir aussi "l'expansion de l'histoire" dans le manuel bash )

Autres conseils

Vous pouvez utiliser Perl pour imprimer tout sauf la première colonne (510) de la ligne demandée:

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

Pour une gamme de champs awk, vous avez besoin d'une boucle for. Ce que vous faites est la soustraction, donc le résultat de zéro.

En général, la commande de coupe ne la tâche d'extraire des colonnes, mais parfois Awk est plus approprié.

Voici ce que vous vouliez dire.

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

La raison est que et $2 ne sont pas des nombres $10 dans les scripts awk. Les indices des champs sont basés 1, donc si vous voulez que le 750, le premier est $5, le second est $11.

Notez que ceci est différent avec les lignes avec « -perm=750 »

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top