Y at-il un moyen de head
/ tail
un document et obtenir la sortie inversée; parce que vous ne savez pas combien de lignes il y a dans un document?
C'est-à-dire que je veux juste tout obtenir sauf les 2 premières lignes de l' foo.txt
annexe d'un autre document.
text-processing
tail
head
chrisjlee
la source
la source
\n
» .. Il fonctionne pour tous les entiers négatifs autres que ce-n -0
qui retours rien du tout , tout comme-n 0
serait ( en utilisant: la tête (coreutils GNU) 7.4) ... Cependant , quand une fuite\n
est présente,-n -0
ne imprime comme on pouvait s'y attendre de la-
, à savoir. il affiche le fichier entier ... Donc, il fonctionne pour toutes les valeurs négatives non nulles .. mais-0
échoue s'il n'y a pas de fin\n
head -n -2
n'est pas compatible POSIX .Si vous voulez toutes les lignes sauf les premières N-1, appelez
tail
avec le nombre de lignes+N
. (Le nombre correspond au numéro de la première ligne que vous souhaitez conserver, commençant à 1, c'est-à-dire que +1 signifie que vous commencez en haut, +2 signifie que vous sautez une ligne, etc.).Il n'y a pas de moyen facile et portable de sauter les N dernières lignes. GNU
head
permethead -n +N
en contrepartie detail -n +N
. Sinon, si vous aveztac
(par exemple, GNU ou Busybox), vous pouvez le combiner avec tail:De manière portable, vous pouvez utiliser un filtre awk (non testé):
Si vous souhaitez supprimer les dernières lignes d'un fichier volumineux, vous pouvez déterminer le décalage en octets de la pièce à tronquer, puis effectuer la troncature avec
dd
.Vous ne pouvez pas tronquer un fichier en place au début. Toutefois, si vous devez supprimer les premières lignes d'un fichier volumineux, vous pouvez déplacer le contenu .
la source
Depuis la
tail
page de manuel (GNUtail
, c’est-à-dire):Ainsi, ce qui suit devrait ajouter tous , mais les 2 premières lignes de
somefile.txt
àanotherfile.txt
:la source
Pour supprimer les n premières lignes, GNU sed peut être utilisé. Par exemple si n = 2
La
!
moyenne "exclut cet intervalle". Comme vous pouvez l’imaginer, un résultat plus compliqué peut être obtenu, par exemplecela montrera la ligne 3,4,5,7. Plus de puissance provient de l'utilisation d'expressions régulières au lieu d'adresses.
La limite est que les numéros de lignes doivent être connus à l'avance.
la source
sed 1,2d
? Plus simple est généralement mieux. En outre, rien dans vos exemples n’est spécifique à GNU Sed; vos commandes utilisent toutes les fonctionnalités POSIX standard de Sed .Vous pouvez utiliser
diff
pour comparer la sortie dehead
/tail
au fichier d'origine, puis supprimer ce qui est identique, obtenant ainsi l'inverse.la source
Tandis que la
tail -n +4
sortie du fichier à partir de la 4ème ligne (toutes les lignes sauf les 3 premières) est standard et portable, sahead
contrepartie (head -n -3
toutes les lignes sauf les 3 dernières) ne l’est pas.Portable, vous feriez:
Ou:
(Méfiez-vous que sur certains systèmes où l’
sed
espace de modèle est de taille limitée, les valeurs ne sont pas élevéesn
)Ou:
la source
Si
<infile
est unlseek()
fichier normal, alors oui, certainement, n'hésitez pas. Ce qui précède est une construction entièrement prise en charge par POSIXly.la source
Mon approche est similaire à celle de Gilles, mais je ne fais que renverser le fichier avec cat et le diriger avec la commande head.
tac -r thefile.txt | head thisfile.txt (remplace les fichiers)
la source
J'espère que j'ai bien compris votre besoin.
Vous avez plusieurs façons de compléter votre demande:
Où / etc / passwd est votre fichier
La 2ème solution peut être utile si vous avez un gros fichier:
la source
Solution pour BSD (macOS):
Supprimer les 2 premières lignes:
Supprimer les 2 dernières lignes:
... pas très élégant mais fait le travail!
la source