Qu'est-ce qui équivaut à la commande head / tail pour afficher head / tail ou une ligne?
head2 -2 "abcdefghijklmnopqrstuvwxyz" => ab tail2 -2 "abcdefghijklmnopqrstuvwxyz" => yz
4 Réponses :
Vous pouvez utiliser couper https://linux.die.net/man/1/cut
Mais vous n'en avez pas besoin car nous avons l'extraction de sous-chaînes bash:
export txt="abcef"
echo head: ${txt:0:2}
echo tail: ${txt: -2}
C'était la première réponse et indiquait déjà l'extraction par coupe et bash. Pourriez-vous le @donwvoter dire pourquoi le vote défavorable, s'il vous plaît? Les autres n'ont-ils pas également amélioré progressivement leurs réponses?
J'ai décliné votre réponse initiale - c'était une réponse de lien seulement. J'ai vu votre commentaire par hasard, depuis que j'ai laissé cette page ouverte - la prochaine fois, veuillez respecter les directives de réponse (voir méta) du projet initial, car la plupart d'entre nous ne perdons pas de temps à expliquer nos votes positifs / négatifs. De plus, il y a peu de chance que quelqu'un qui vous a voté revienne pour vérifier une amélioration. Si vous aviez juste donné des exemples de ce à quoi vous avez lié (dans la version originale), je vous aurais probablement voté pour être le premier.
C'est équivalent à head et tail si vous voulez les premiers / derniers caractères de tout le flux
$ rev <<<"abcdefghijklmnopqrstuvwxyz"$'\n''second line' | cut -c-2 | rev yz ne
Le head ne produira pas de nouvelle ligne, car il ne sortira que les deux premiers caractères. tail compte la nouvelle ligne comme un caractère, nous devons donc en sortir 3 pour obtenir les deux derniers. Reformater les commandes pour prendre des arguments comme dans votre exemple est trivial et je laisse cela à OP.
Vous pouvez utiliser cut si vous voulez les premiers caractères de chaque ligne:
$ cut -c-2 <<<"abcdefghijklmnopqrstuvwxyz"$'\n''second line' ab se
et utilisez rev | couper | rev mnémonique pour obtenir les derniers caractères:
$ head -c2 <<<"abcdefghijklmnopqrstuvwxyz" ab<will not output a newline> $ tail -c3 <<<"abcdefghijklmnopqrstuvwxyz" yz<newline>
Si vous voulez afficher plus de 10 caractères, vous ne pouvez pas utiliser cut. Y
Vous pouvez utiliser directement la syntaxe d'extraction de sous-chaînes bash, pas besoin d'utiliser des commandes externes :
echo abcdefghijklmnopqrstuvwxyz | sed -E 's/^(..).*/\1/'; echo abcdefghijklmnopqrstuvwxyz | sed -E 's/^.*(..)$/\1/'; ab yz
Avec sed : p >
$ input="abcdefghijklmnopqrstuvwxyz"; echo ${input: -2}
yz
$ input="abcdefghijklmnopqrstuvwxyz"; echo ${input:0:2}
ab
En fonction de votre distribution, vous pouvez utiliser la cut commande:
Head:
echo "Hello! This is a test string." | rev | cut -c1-2 | rev
Rendements: He
Pour la queue, vous faites essentiellement la même chose , mais vous inversez d'abord la corde, coupez-la et inversez-la à nouveau.
Queue:
echo "Hello! This is a test string." | cut -c1-2
Rendements: g.
2 est le nombre de caractères à imprimer