Files

連接文件,在它們之間放置一個空行

  • January 12, 2021

我有一堆具有相同副檔名的文件(比如說 .txt),我想將它們連接起來。我正在使用cat *.txt > concat.txt,但我想在每個文件之間添加一個新行,以便在 concat.txt 中區分它們。

是否可以使用單個 bash 命令而不是這樣的實現來完成

謝謝

使用 GNU sed

sed -s -e $'$a\\\n' ./*.txt >concat.out

這將所有數據連接起來,concat.out同時在每個處理的文件的末尾附加一個空行。

-sGNU的選項sed使$地址匹配每個文件中的最後一行,而不是像往常一樣匹配所有數據的最後一行。該a命令在給定位置附加一行或多行,添加的數據是換行符。換行符被編碼為$'\n',即“C 字元串”,這意味著我們使用的 shell 可以理解這些(如bashzsh)。否則必須將其添加為文字換行符:

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

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