Buy Me a Coffee

一次性替換多個檔案中的文字

在 Linux 環境下進行大規模的文字替換時,find 和 sed 是非常有用的工具。以下是如何使用這些工具來解決在移植 .NET Core 應用到 Docker 時遇到的大小寫問題。

問題描述

在將 .NET Core 應用程式移植到 Docker 映像時,發現在 Windows 上編譯正常,但在 RedHat 上卻出現錯誤,原因是 csproj 檔案中參照大小寫不正確。為了批量更正這個問題,需要在多個檔案中進行文字替換。

使用 find 和 sed 進行替換

下面的指令將在所有的 .csproj.sln 檔案中將 ‘COMMON’ 字串替換為 ‘Common’。

# 將所有 .csproj 檔案中的 'COMMON' 替換為 'Common'
find . -type f -name "*.csproj" -exec sed -i 's/COMMON/Common/g' {} \;

# 將所有 .sln 檔案中的 'COMMON' 替換為 'Common'
find . -type f -name "*.sln" -exec sed -i 's/COMMON/Common/g' {} \;

解釋指令

  • find . -type f -name "*.csproj": 在當前目錄及其子目錄中尋找所有以 .csproj 結尾的檔案。
  • -exec sed -i 's/COMMON/Common/g' {} \;: 對找到的每個檔案執行 sed 命令進行置換。-i 表示直接修改檔案內容,s/COMMON/Common/g 是 sed 的替換命令,意味著將 ‘COMMON’ 替換為 ‘Common’,且這個替換在每一行上都會執行。

這種方法可以快速有效地解決在 Linux 系統上進行批量文字替換的問題,特別是在涉及大量檔案時。