Files
連接文件,在它們之間放置一個空行
我有一堆具有相同副檔名的文件(比如說 .txt),我想將它們連接起來。我正在使用
cat *.txt > concat.txt
,但我想在每個文件之間添加一個新行,以便在 concat.txt 中區分它們。是否可以使用單個 bash 命令而不是這樣的實現來完成?
謝謝
使用 GNU
sed
:sed -s -e $'$a\\\n' ./*.txt >concat.out
這將所有數據連接起來,
concat.out
同時在每個處理的文件的末尾附加一個空行。
-s
GNU的選項sed
使$
地址匹配每個文件中的最後一行,而不是像往常一樣匹配所有數據的最後一行。該a
命令在給定位置附加一行或多行,添加的數據是換行符。換行符被編碼為$'\n'
,即“C 字元串”,這意味著我們使用的 shell 可以理解這些(如bash
或zsh
)。否則必須將其添加為文字換行符:sed -s -e '$a\ ' ./*.txt >concat.out
實際上,
'$a\\'
似乎'$a\ '
也有效,但我不完全確定為什麼。如果有人認為該
a
命令太麻煩而無法正確執行,這也可以:sed -s -e '${p;g;}' ./*.txt >concat.out
這些變體中的任何一個都會在最後一個文件的輸出末尾插入一個空行。如果不需要最後的換行符,請
sed '$d'
在重定向到輸出文件之前通過傳遞整體結果來刪除它:sed -s -e '${p;g;}' ./*.txt | sed -e '$d' >concat.out