Cat

為什麼將文件“cat”到自身中會擦除它?

  • June 21, 2012

可能重複:

IO 重定向和 head 命令

我只是想刪除文件的第一行以外的所有內容。我這樣做了:

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您可以在命令行開關之後為“備份”(即原始)文件的名稱指定任何字元序列(或單個字元) 。

引用自:https://unix.stackexchange.com/questions/41207