我的Mac上,就當我嘗試運行:的Unix腳本刪除文件的第一行的是Mac
sed -i 2d file.csv
從答案
到Unix script to remove the first line of a CSV file,我得到以下錯誤:
sed: 1: "file.csv": invalid command code f
如果我想刪除file.csv
的前兩行,我該怎麼辦?
我的Mac上,就當我嘗試運行:的Unix腳本刪除文件的第一行的是Mac
sed -i 2d file.csv
從答案
到Unix script to remove the first line of a CSV file,我得到以下錯誤:
sed: 1: "file.csv": invalid command code f
如果我想刪除file.csv
的前兩行,我該怎麼辦?
在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
- 它最初是由Diego在answer他選擇刪除引用,該-i
選項將指示要使用備份擴展的一個參數。
-i
extensionEdit 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.
sed -i.bak '2,3d' filename.csv
將刪除線1和2(假設你有頭)
什麼這個命令的作用是編輯文件,同時創建原始文件的備份(的.bak
因此使用)被引用。刪除行'2,3d'
將刪除原始文件的第2行和第3行。
這將刪除第二行中的項目,但不刪除第一行中的項目:「sed 2d file.csv> file.csv.bak && cp file.csv.bak file.csv rm -f file.csv.bak」 – NumenorForLife
我介紹瞭如何刪除文件中的前兩行,以及如何刪除文件中的前兩個數據行。你還想要什麼? –