Gibt es eine einfache Möglichkeit, eine Datei zu wiederholen und die erste und letzte Zeile zu überspringen? Ich habe mir Piping von head nach tail angesehen, aber für diese scheint es, als müsste ich die Gesamtzahl der Zeilen von Anfang an kennen. Ich habe mir auch split angesehen, aber ich sehe auch keinen Weg, dies zu tun. 
Antwort
 Nur mit sed ohne Pipes: 
sed "1d;$d" file.txt HINWEIS
-  1bedeutet zuerst Zeile
-  dbedeutet löschen
-  ;ist das Trennzeichen für 2 Befehle
-  $bedeutet letzte Zeile
Antwort
 Sie müssen die Anzahl der Zeilen nicht im Voraus kennen. tail und head können einen Versatz vom Anfang bzw. Ende der Datei nehmen. 
Diese Pipe beginnt bei die zweite Zeile der Datei (Überspringen der ersten Zeile) und stoppt bei der vorletzten Zeile (Überspringen der letzten Zeile). Um mehr als eine Zeile am Anfang oder Ende zu überspringen, passen Sie die Zahlen entsprechend an.
tail -n +2 file.txt | head -n -1 Wenn Sie es umgekehrt machen, funktioniert das natürlich genauso:
head -n -1 file.txt | tail -n +2 Kommentare
-  Ich habe nicht ' t weiß warum, aber head -n -1entfernt die erste UND die letzte Zeile meiner.txt-Datei unter Ubuntu 14.04.2LTS.
-  Unter MacOS head -n -1sagthead: illegal line count -- -1
-  head -n -1funktioniert mit GNU-Coreutils, vielleicht hat MacOS eine BSD-Variante?
Antwort
 So gehts mit awk: 
awk "NR>2 {print t} {t=$0}"  Auch eine andere Möglichkeit für sed: 
sed "1d;x" file.txt  x ist fortgeschritten sed Befehl, wechselt die aktuelle Leitung mit dem vorherige: Strom fließt in den Puffer und vorher s geht zum Bildschirm und so weiter, während sed Stream zeilenweise verarbeitet (aus diesem Grund ist die erste Zeile leer). 
-Lösung für jeden Schritt (Zeile) fügt die aktuelle Zeile in die Variable ein und druckt sie erst aus, nachdem die zweite Zeile übergeben wurde. So haben wir eine beschissene Folge von Zeilen auf dem Bildschirm von der vorletzten bis zur vorletzten. Die letzte Zeile wird weggelassen, da sich die Zeile in der Variablen befindet und erst beim nächsten Schritt gedruckt werden sollte, aber alle Schritte bereits ausgeführt werden und die Zeile auf dem Bildschirm nie angezeigt wird.
 Dieselbe Idee im perl: 
 perl -ne "print $t if $.>2 ; $t=$_" file.txt  
 $. steht für Zeilennummer und $_ für die aktuelle Zeile. 
 perl -n ist eine Verknüpfung für while(<..>) {..} Struktur und -e ist für Inline-Skript. 
Antwort
Für Mac-Benutzer:
 Auf dem Mac head -n -1 funktioniert nicht. Kehren Sie stattdessen die Datei um, hacken Sie die erste Zeile ab und kehren Sie sie dann um: 
tail -r file.txt | tail -n +2 | tail -r Erläuterung:
- 
tail -r: Kehrt die Reihenfolge der Zeilen in der Eingabe um.
- 
tail -n +2: druckt alle l ines beginnend mit der zweiten Zeile in der Eingabe
Kommentare
- Mit um genau zu sein.
Antwort
In Python würde mir das gefallen.
#!/usr/bin/python3 import re import sys file = sys.argv[1] with open(file, "r") as f: L = [] for line in f: line = re.sub(r"\n", r"", line) L.append(line) print("\n".join(L[1:-1]))  Fügen Sie den obigen Code in eine Datei ein und nennen Sie ihn script.py. Führen Sie das Skript für die Datei aus, mit der Sie prüfen möchten. 
python3 script.py /path/to/the/file Beispiel:
$ cat file foo apple banana bar $ python3 script.py file apple banana Kommentare
-  ''.join(list(open("/path/to/file"))[1:-1]): Dies scheint eine einfachere Lösung zu sein 🙂 Und wenn Sie dies direkt an der Eingabeaufforderung tun müssen, können Sie Folgendes versuchen:python -c 'print("".join(list(open("/path/to/file"))[1:-1]))'