Comment copier une commande de l'histoire?
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
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
»