2013-02-22 58 views
1

我有一個文本文件,比如text在將文件發送到管道之前在文件的頂部和底部添加一行

我想要做的是將文本文件放入管道中(如cat text |),但在頂部和底部添加一行 - 但不創建新文件(因爲text文件很大)或修改它。

這可能嗎?我在想echo $(echo "line"; cat text; echo "line"),但我不喜歡那樣。

+1

在bash中,單獨使用括號(沒有第一個echo和'$')應該可以工作。 – 2013-02-22 16:53:36

+1

你也可以爲額外的行創建一個文件並執行:'cat first-line text' – 2013-02-22 16:59:48

回答

6

從人的bash:

(列表)列表是在子shell環境(參見下面的命令執行環境)執行。影響外殼環境的變量賦值和內置命令在命令完成後不會保持有效。 返回狀態是列表的退出狀態。

所以這應該工作:

(echo first line; cat file; echo last line) | some_command 

至於建議的chepner,當你不需要一個子shell你可以用{},而不是()。在這種情況下,;是強制性的,包括組中的最後一條命令。

+3

你也可以在這裏使用一個簡單的命令組:'{echo first;貓文件;最後回聲; } | some_command'。沒有必要使用子殼 – chepner 2013-02-22 16:58:58

+0

我認爲可能比複雜的sed更簡單。謝謝! – 2013-02-22 17:00:03

+0

@chepner:當我這樣做時,文件似乎打印在STDOUT而不是管道上。 – 2013-02-22 17:28:29

相關問題