2014-10-29 12 views
1

我試圖從somefile獲得前4行,並將它們與someotherfile的內容連接並將其輸出到somefile如何連接兩個文件並將結果寫回其中一個原始文件

head -4 /somefile | cat - /someotherfile > /somefile 

當我做到這一點someotherfile的內容somefile結束了,但不是第4行。如果我輸出到一個完全不同的文件,那麼它效果很好。

顯然有一個問題,試圖寫入我正在閱讀的同一個文件。完成這項任務最簡單的方法是什麼?

我正在嘗試在RedHat Enterprise 6 bash shell上執行此操作。

+2

'head -4/somefile | cat -/someotherfile>/yetanotherfile && mv/yetanotherfile/somefile' – ooga 2014-10-29 22:49:53

回答

0

您可以保存head輸出到臨時變量,就像這樣:

HEAD="$(head -4 some file)" 
(echo "$HEAD"; cat someotherfile) >some file 

或者你可以刪除5日開始的所有線條和追加另一個文件末尾的內容:

sed -i '5,$d' somefile 
cat someotherfile >>somefile 
+0

謝謝Slava。我接受了你的第二個建議。 – irrational 2014-10-29 23:09:14

0

這也正是問題:

「顯然有與試圖寫我從閱讀同一文件中的問題」

使用另一個文件寫入,完成後將其移動到覆蓋原文件。或者在寫入內容之前先使用某種工具來讀取內存中的原始文件,但我不確定bash是否有類似的東西。

0

所以看來你想編輯文件somefile如下:刪除它的第四行後的所有內容,並追加文件someotherfile

您可以使用標準編輯器ed

ed -s somefile < <(printf '%s\n' '5,$d' 'r someotherfile' 'wq') &> /dev/null 
  • 5,$d告訴ed刪除一切從第五行直到文件的末尾(&>/dev/null是在這裏看不到任何的ed投訴的情況下,該文件somefile具有小於4行) 。
  • r someotherfile將插入文件someotherfile
  • wq是如何評價kthxbye(並保存)ed
+0

由於某種原因,這沒有奏效。沒有錯誤,但在運行後,「somefile」仍然與以前一樣。我確實喜歡這是一個單線解決方案。 – irrational 2014-10-29 23:11:27

+0

@irrational:對不起,它沒有工作。可能是因爲關於RH的'ed'工作的細節。手工嘗試:'ed somefile'。然後,從'ed'內嘗試命令:'5,$ d','r someotherfile'和'wq',看看'ed'抱怨的地方。也許最後一個'wq'應該是'w'然後'q'。從你這樣的經歷中,你會看到如何適應我給你的案例。 – 2014-10-29 23:26:27

相關問題