2010-04-16 95 views
8

我無法搜索特定的字符串,因爲它們都非常相似,但我希望簡單地刪除文件中的前4行。如何刪除文件中的第一行?

它們都是可變長度。我對perl有了一個想法,這似乎比我想象的要困難,但我希望在Perl,AWK或shell命令中做到這一點,如果可能的話。

有沒有人有一個簡單的方法來做到這一點?

+2

注意:不要使用'destructive_process file> tempfile; mv tempfile文件'你應該使用'destructive_process文件> tempfile && mv tempfile文件'。 '&&'而不是';'可以防止原始文件被覆蓋,因爲如果第一部分成功,它只會執行第二部分。 – 2010-04-16 13:15:42

回答

7

sed是最簡單的。要刪除文件的第一行,這樣做:

sed '1d' file.txt 

或者,要刪除前四行,這樣做:

sed '1,4d' file.txt 
+0

呃,那很完美! 感謝大家誰建議sed(雖然-i不適用於此版本) – Soop 2010-04-16 11:12:33

+0

+1'sed'通常比基於tail的解決方案運行得更快。 – 2010-04-16 11:19:21

+0

在發佈之前,您是否用大線測試了命令?雖然沒有要求它不適用於超過15兆字節的行。 – user869097 2011-08-13 13:41:10

1

嘗試這種情況:sed -i 1d file

的一般規則:

要卸下n第一行:sed '1,nd' file.txt
例如:sed '1,4d' file.txt以除去前4行

4
sed -i '1,4d' <filename> 

將刪除其輸入文件的前四行。 (如果您只想刪除第一行,則可以使用'1d'代替。)

-i標誌表示就地編輯,這意味着輸入文件也是輸出文件,因此將更改寫回出到原始文件。如果您希望文件完好無損,修改後的內容只需寫入標準輸出,只需省略-i即可。

這和許多其他sed 1套可在這裏方便的參考文獻中找到:

http://sed.sourceforge.net/sed1line.txt

-1

搜索第四屆「\ r \ n」或文件「 \ n「和該索引的子字符串。

13
tail -n+2 filename 

將跳過filename的第一行並將其輸出到標準輸出。 -n+2選項意味着開始輸出從第二行開始的行。

當然,你可以用任何你需要的數字代替2(你的標題和實際問題內容分別說第一和第五)。

+0

+1:這個解決方案比我的更好。我不知道你可以通過'+ 3'到'-n'。 – 2010-04-16 11:08:46

1

的溶液其不需要的腳本語言(例如AWK,sed的,PERL等):

tail -n `expr \`cat FILE | wc -l\` - 1` FILE > FILE.new; mv FILE.new FILE 

的想法是計數文件中的行的數目,然後減去一個,那麼結果傳遞到'尾巴'命令。

+0

什麼是「貓」?只需在文件上直接執行'wc'。此外,'tail'理解'-n + 5',它從第5行開始輸出。 – Svante 2010-04-16 11:07:30

+0

啊,我不知道你可以將'+ N'傳遞給尾部的-n開關。請參閱Mark Rushakoffs的答案,以獲得比我的更好(更高效)的解決方案。 – 2010-04-16 11:07:36

+0

要迂腐,它使用一種腳本語言:shell腳本:) – rjh 2010-04-16 11:07:54

2
tail -n +5 file > temp 
mv temp file 
5

跳過前4行

$ awk 'NR>4' file >temp;mv temp file 

$ more +5 file >temp;mv temp file 

$ perl -i.bak -ne '$.>=4 && print' file 
+1

如果要刪除的行數是可變的:'awk -v n = $ num'NR> n'file' – 2010-04-16 12:55:21

2
perl -pe'1..4and$_=""' 

爲等同於

sed 1,4d 

perl -ne'1..4or print' 

爲等同於

sed -n '1,4!p' 

您可以使用-ised中的相同。

+0

@daotoad:我注意到很少使用觸發器。即使對於中等經驗的Perl開發人員,我也注意到它可能是一見鍾情的文檔看起來很複雜。 – 2010-04-16 17:11:10

1

使用File :: Tie。這沒問題。

相關問題