2015-04-07 30 views

回答

11

在Mac上,BSD sed需要備份的後綴(但後綴可以是空字符串,'') - 它不是可選的,因爲它與GNU sed一樣。因此,您的命令被解釋爲「備份帶有後綴2d的文件,並且...... oops,您提供的腳本是file.csv,但f不是sed命令」。

sed -i .bak -e 2d file.csv 

這將從CSV文件中刪除第一行數據(離開標題行到位)。

如果你想編寫代碼,以便它用BSD和GNU sed工作,那麼你必須後綴附加到-i選項(GNU sed需要連接到-i選項的後綴;這就是它如何識別是否有一個可選的後綴與否):

sed -i.bak -e 2d file.csv 

注意,你不能用一個空後綴,並有指揮工作既BSD sed和GNU sed

-e在兩個命令行中都不是必需的,但我經常使用它。我也經常用單引號引用命令,雖然在這裏沒有必要。

如果要刪除前兩條數據線,請使用2,3d作爲命令。如果要刪除前兩行,請使用1,2d

如果你不想備份,那麼你就可以在sed命令完成後刪除它(簡單),或使用兩級或三級舞蹈:

sed 2d file.csv > file.csv.bak && 
mv file.csv.bak file.csv   # Oops; there went the links 

sed 2d file.csv > file.csv.bak && 
cp file.csv.bak file.csv 
rm -f file.csv.bak 

有了這些,你可能需要如果中斷或其他信號終止腳本,則添加trap命令來清除中間文件.bak


從Apple文檔會開出sed - 它最初是由Diegoanswer他選擇刪除引用,該-i選項將指示要使用備份擴展的一個參數。

-iextension

Edit files in-place, saving backups with the specified extension. If a zero-length extension is given, no backup will be saved. It is not recommended to give a zero-length extension when in-place editing files, as you risk corruption or partial content in situations where disk space is exhausted, etc.

+0

這將刪除第二行中的項目,但不刪除第一行中的項目:「sed 2d file.csv> file.csv.bak && cp file.csv.bak file.csv rm -f file.csv.bak」 – NumenorForLife

+1

我介紹瞭如何刪除文件中的前兩行,以及如何刪除文件中的前兩個數據行。你還想要什麼? –

2

sed -i.bak '2,3d' filename.csv將刪除線1和2(假設你有頭)

什麼這個命令的作用是編輯文件,同時創建原始文件的備份(的.bak因此使用)被引用。刪除行'2,3d'將刪除原始文件的第2行和第3行。

+0

如果我沒有標題怎麼辦? – NumenorForLife

+1

然後使用'1,2d'而不是'2,3d' –

+0

如果我不想創建出現的備份文件,該怎麼辦? – NumenorForLife

相關問題