2014-07-02 56 views
11

除去前兩行我有一個文本文件的輸出如下:慶典 - 如何從輸出

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

我期待從我的輸出刪除第一個2行。我用來執行的這個特定的shell腳本總是擁有前兩行。

我這是怎麼產生和讀取文件:

#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 

如何刪除那些最上面兩行?

+0

這些行看起來像是在其他腳本中生成的。嘗試在其他文件中查找'echo'語句,例如'runPagesToMove.sh'和'confluence.sh'。如果你發佈這些文件,有人可能能夠解決這個問題,但這個問題並不能從給出的代碼中解決。 – Adam

回答

14

經典的答案會用sed刪除線1和2:

sed 1,2d "$PGLIST" 
+0

昨晚我有這個工作 - './runscript.sh>「$ PGLIST」| sed 1,2d $ PGLIST'但由於某種原因,它現在不工作。所以,我也嘗試過這種方式,但沒有運氣。 './runscript.sh>「$ PGLIST」| sed 1,2d $ PGLIST> $ PGLIST;' – noober

+0

昨晚你沒有顯示'正在工作'。昨天晚上,你要麼省略了'>',要麼你用分號(或換行符)代替'|'。警惕嘗試讀取和寫入管道中的單個文件;通常在讀取文件之前最終會破壞文件,這會導致惱怒。總的來說,我認爲你要找的是'./runscript.sh | sed 1,2d>「$ PGLIST」',但我無法確定。 –

14

您可以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

哇,甚至可以在macOS上運行! macOs在其「man」頁面中沒有提到這一點。 – Patrick

5

AWK方式:

awk 'NR>2' "$PGLIST"