我無法搜索特定的字符串,因爲它們都非常相似,但我希望簡單地刪除文件中的前4行。如何刪除文件中的第一行?
它們都是可變長度。我對perl有了一個想法,這似乎比我想象的要困難,但我希望在Perl,AWK或shell命令中做到這一點,如果可能的話。
有沒有人有一個簡單的方法來做到這一點?
我無法搜索特定的字符串,因爲它們都非常相似,但我希望簡單地刪除文件中的前4行。如何刪除文件中的第一行?
它們都是可變長度。我對perl有了一個想法,這似乎比我想象的要困難,但我希望在Perl,AWK或shell命令中做到這一點,如果可能的話。
有沒有人有一個簡單的方法來做到這一點?
sed
是最簡單的。要刪除文件的第一行,這樣做:
sed '1d' file.txt
或者,要刪除前四行,這樣做:
sed '1,4d' file.txt
呃,那很完美! 感謝大家誰建議sed(雖然-i不適用於此版本) – Soop 2010-04-16 11:12:33
+1'sed'通常比基於tail的解決方案運行得更快。 – 2010-04-16 11:19:21
在發佈之前,您是否用大線測試了命令?雖然沒有要求它不適用於超過15兆字節的行。 – user869097 2011-08-13 13:41:10
嘗試這種情況:sed -i 1d file
的一般規則:
要卸下n
第一行:sed '1,nd' file.txt
例如:sed '1,4d' file.txt
以除去前4行
sed -i '1,4d' <filename>
將刪除其輸入文件的前四行。 (如果您只想刪除第一行,則可以使用'1d'
代替。)
-i
標誌表示就地編輯,這意味着輸入文件也是輸出文件,因此將更改寫回出到原始文件。如果您希望文件完好無損,修改後的內容只需寫入標準輸出,只需省略-i
即可。
這和許多其他sed
1套可在這裏方便的參考文獻中找到:
搜索第四屆「\ r \ n」或文件「 \ n「和該索引的子字符串。
tail -n+2 filename
將跳過filename
的第一行並將其輸出到標準輸出。 -n+2
選項意味着開始輸出從第二行開始的行。
當然,你可以用任何你需要的數字代替2(你的標題和實際問題內容分別說第一和第五)。
+1:這個解決方案比我的更好。我不知道你可以通過'+ 3'到'-n'。 – 2010-04-16 11:08:46
的溶液其不需要的腳本語言(例如AWK,sed的,PERL等):
tail -n `expr \`cat FILE | wc -l\` - 1` FILE > FILE.new; mv FILE.new FILE
的想法是計數文件中的行的數目,然後減去一個,那麼結果傳遞到'尾巴'命令。
tail -n +5 file > temp
mv temp file
跳過前4行
$ awk 'NR>4' file >temp;mv temp file
$ more +5 file >temp;mv temp file
$ perl -i.bak -ne '$.>=4 && print' file
如果要刪除的行數是可變的:'awk -v n = $ num'NR> n'file' – 2010-04-16 12:55:21
perl -pe'1..4and$_=""'
爲等同於
sed 1,4d
或
perl -ne'1..4or print'
爲等同於
sed -n '1,4!p'
您可以使用-i
與sed
中的相同。
@daotoad:我注意到很少使用觸發器。即使對於中等經驗的Perl開發人員,我也注意到它可能是一見鍾情的文檔看起來很複雜。 – 2010-04-16 17:11:10
使用File :: Tie。這沒問題。
注意:不要使用'destructive_process file> tempfile; mv tempfile文件'你應該使用'destructive_process文件> tempfile && mv tempfile文件'。 '&&'而不是';'可以防止原始文件被覆蓋,因爲如果第一部分成功,它只會執行第二部分。 – 2010-04-16 13:15:42