Linux 於 Bash shell (CLI) 要怎麼將檔案第一行(檔頭、檔案開頭)或者指定行數增加內容?
註:在檔案最後一行加入內容,只要 echo 'last content' >> filename.txt 即可。
Linux CLI 如何在檔案前面增加內容
於 CLI 要對大量檔案某些行數增加內容,可以使用 sed 或 perl 來達成。
Perl 指定行數寫入內容的範例
- perl -i -pe 's/^/"column1","column2","column3"\n/ if($.==1)' test.csv # 將此內容寫入第一行
- perl -i -pe 's/^/"column1","column2","column3"\n/ if($.==3)' test.csv # 將此內容寫入第三行
sed 指定行數寫入內容的範例
sed 下述內容 -i 的部份,建議開始測試都先用 -e,直接將檔案內容印出來,看看是不是自己要的。(-i 就會直接寫入檔案內容)
- sed -e "1icontent" test.csv # 1i 就是從第一行開始 insert,test.csv 要有內容,不能是空的
- sed -e "$acontent" test.csv # $a 就是從最後一行開始 append
sed 指定行數寫入內容的範例
- sed -i '1i"column1","column2","column3"' test.csv # 檔案開頭寫入內容
- sed -i '3i"column1","column2","column3"' test.csv # 第三行寫入內容
sed 刪除某行、取代某些字元的範例
- -e 會直接輸出執行後的結果,-i 是直接取代寫入檔案
- sed -e '1d' test.log # 刪除第一行
- sed -e '10,$d' test.log # 第10行刪除到最後
- sed -e 's/col/COL/g' test.log # 把檔案的所有 col 都換成 COL
- sed -e '1d' -e 's/col/COL/g' siege.log # 刪除第一行 並 把檔案的 col 都換成 COL
sed 搭配 find、read 對目錄內所有檔案增加內容
- 對此目錄內的所有 txt 第一行增加 "column1","column2","column3" 的內容
find ./ -name '.txt' | while read -r file; do sed -i '1i"column1","column2","column3"' $file; done