Cat
為什麼將文件“cat”到自身中會擦除它?
可能重複:
我只是想刪除文件的第一行以外的所有內容。我這樣做了:
head -1 foo.txt
…並驗證我只看到了第一行。然後我做了:
head -1 foo.txt > foo.txt
但現在不是只包含第一行,而是
foo.txt
空的。原來這
cat foo.txt > foo.txt
也清空了文件。為什麼?
在 shell 開始處理任何數據之前,它需要確保所有輸入和輸出都是平方的。
因此,在您的情況下,使用
> foo.txt
基本上告訴系統:“創建一個名為的(新)文件並將foo.txt
該命令的所有輸出粘貼到該文件中”。正如您所發現的,問題在於,這會清除以前的內容。
相關,
>>
將附加到現有文件。更新:
這是一個使用
sed
, 小心處理的解決方案:sed -i '2,$d' foo.txt
它將刪除第 2 行以在 file中就地
foo.txt
“最後” 。最好先在一個你能負擔得起的文件上試試這個:)該命令的略微修改版本將保留帶有
.bak
副檔名的原始副本:sed -i.bak '2,$d' foo.txt
-i
您可以在命令行開關之後為“備份”(即原始)文件的名稱指定任何字元序列(或單個字元) 。