我有一個文本文件,比如text
。在將文件發送到管道之前在文件的頂部和底部添加一行
我想要做的是將文本文件放入管道中(如cat text |
),但在頂部和底部添加一行 - 但不創建新文件(因爲text
文件很大)或修改它。
這可能嗎?我在想echo $(echo "line"; cat text; echo "line")
,但我不喜歡那樣。
我有一個文本文件,比如text
。在將文件發送到管道之前在文件的頂部和底部添加一行
我想要做的是將文本文件放入管道中(如cat text |
),但在頂部和底部添加一行 - 但不創建新文件(因爲text
文件很大)或修改它。
這可能嗎?我在想echo $(echo "line"; cat text; echo "line")
,但我不喜歡那樣。
從人的bash:
(列表)列表是在子shell環境(參見下面的命令執行環境)執行。影響外殼環境的變量賦值和內置命令在命令完成後不會保持有效。 返回狀態是列表的退出狀態。
所以這應該工作:
(echo first line; cat file; echo last line) | some_command
至於建議的chepner,當你不需要一個子shell你可以用{}
,而不是()
。在這種情況下,;
是強制性的,包括組中的最後一條命令。
你也可以在這裏使用一個簡單的命令組:'{echo first;貓文件;最後回聲; } | some_command'。沒有必要使用子殼 – chepner 2013-02-22 16:58:58
我認爲可能比複雜的sed更簡單。謝謝! – 2013-02-22 17:00:03
@chepner:當我這樣做時,文件似乎打印在STDOUT而不是管道上。 – 2013-02-22 17:28:29
從這個問題Add new lines to top and bottom of every text file複製:
cat text |sed -e '1 i beginning_line'| sed -e '[email protected][email protected]\[email protected]' |
它似乎工作。
在bash中,單獨使用括號(沒有第一個echo和'$')應該可以工作。 – 2013-02-22 16:53:36
你也可以爲額外的行創建一個文件並執行:'cat first-line text' – 2013-02-22 16:59:48