2014-07-02 9 views
11

Ich habe die folgende Ausgabe in einer Textdatei:bash - wie zuerst 2 Zeilen von Ausgabe entfernen

106 pages in list 
.bookmarks 
20130516 - Daily Meeting Minutes 
20130517 - Daily Meeting Minutes 
20130520 - Daily Meeting Minutes 
20130521 - Daily Meeting Minutes 

Ich suche die ersten 2 Zeilen aus meiner Ausgabe zu entfernen. Dieses bestimmte Shell-Skript, das ich zum Ausführen verwende, hat immer die ersten beiden Zeilen. Diese

ist, wie ich generiert und lesen Sie die Datei:

#Lists 
PGLIST="$STAGE/pglist.lst"; 
RUNSCRIPT="$STAGE/runPagesToMove.sh"; 

#Get List of pages 
$ATL_BASE/confluence.sh $CMD_PGLIST $CMD_SPACE "$1" > "$PGLIST"; 

# BUILD executeable script 
echo "#!/bin/bash" >> $RUNSCRIPT 2>&1 
IFS='' 
while read line 
    do 
    echo "$ATL_BASE/conflunce.sh $CMD_MVPAGE $CMD_SPACE "$1" --title \"$line\" --newSpace \"$2\" --parent \"$3\"" >> $RUNSCRIPT 2>&1 
done < $PGLIST 

Wie kann ich diese Top-2 Zeilen entfernen?

+0

Diese Zeilen sehen aus, als ob sie in Ihren anderen Skripts generiert werden. Versuchen Sie in Ihren anderen Dateien wie 'runPagesToMove.sh' und' confluence.sh' nach echo-Anweisungen zu suchen. Wenn Sie diese Dateien veröffentlichen, kann möglicherweise jemand das Problem lösen, aber das Problem ist nicht wirklich vom angegebenen Code lösbar. – Adam

Antwort

14

Die klassische Antwort sed verwenden würden Linien löschen 1 und 2:

sed 1,2d "$PGLIST" 
+0

Ich hatte das letzte Nacht arbeiten - './runscript.sh>" $ PGLIST "| sed 1,2d $ PGLIST' aber aus irgendeinem Grund funktioniert es jetzt nicht. Also, ich habe es auch so versucht, aber kein Glück. './runscript.sh>" $ PGLIST "| sed 1,2d $ PGLIST> $ PGLIST; ' – noober

+0

Sie hatten nicht, was Sie letzte Nacht" arbeiten "zeigen. Letzte Nacht haben Sie entweder das '>' weggelassen oder Sie hatten ein Semikolon (oder eine neue Zeile) anstelle des '|'. Seien Sie vorsichtig beim Versuch, eine einzelne Datei in einer Pipeline zu lesen und zu schreiben. Normalerweise endet man damit, die Datei zu überlisten, bevor sie gelesen wird, was zu Verzweiflung führt. Im Großen und Ganzen denke ich, was Sie suchen, ist './runscript.sh | sed 1,2d> "$ PGLIST" ', aber ich kann mir nicht sicher sein. –

14

Sie können dies erreichen mit tail:

tail -n +3 "$PGLIST" 
-n, --lines=K 
      output the last K lines, instead of the last 10; or use -n +K 
      to output starting with the Kth 
+0

Wow, funktioniert sogar auf macOS! MacOs erwähnt das nicht auf seiner "man" -Seite. – Patrick

5

awk Weg:

awk 'NR>2' "$PGLIST"