shell 批量修改多個檔案中的內容

2021-09-26 14:19:28 字數 2333 閱讀 2183

操作如下

參考文獻

小結現在會議很多都是雙盲評,然而又需要上傳材料/實驗結果,這時候需要把材料中和自己名字相關的去掉。

故涉及到批量修改多個檔案中的內容,在此記錄之。

我在ubuntu下存在我的材料,都存在叫做results的資料夾裡面,這裡面主要是有很多日誌,這些日誌裡包含系統路徑,如/home/dale/***,然而這些如果被評委看到名字的話,可能不太好。

所以我現在希望把這個results資料夾下的dale全部換成user。

這裡再次做了研究,發現有個更好的版本,記錄如下:

# 先找到所有相關檔案

for file in `grep -rn "yang" .`

do # 如果是我們要找到的檔案,即repair_algorithms/資料夾內的檔案,那就操作。否則不做任何處理(這個就很nice)

if [[ "$file" == ./repair_algorithms/* ]];then

# cut 出檔案的路徑

file_name=`echo $file | cut -d ':' -f 1`

# sed 就是把所有file_name 檔案中的yang全部替換為impact,至此達到目標

sed -i 's/yang/impact/g' $

fidone

關於特殊字元的問題,是需要轉義的,參考:

sed替換特殊符號

(此外,還有如:「/」較多時,把替換符「/」換成「#」),示例指令碼如下:

cd ./bug-dot-jar/repositories/

pwdfor file_name in `find . -name .git -type f`

do #gitdir: ../../../../.git/modules/benchmarks/bug-dot-jar/modules/repositories/accumulo

#gitdir: ../../../dataset_modules/bug-dot-jar/modules/repositories/accumulo

#../.git/modules/benchmarks

#dataset_modules

sed -i 's#\.\./.git/modules/benchmarks#dataset_modules#g' $

echo "$file_name"

done

1)用grep找到所有包含dale的檔案(的相對路徑);

2)用sed對檔案的指定內容進行替換(將dale替換為user)。

**如下:

# grep所有有dale的檔案

for file in `grep -rn "dale" .`

do # 然而grep出來的,除了路徑,還會顯示匹配到的內容,如/home/dale,這時候就要把這種非路徑的情況給排除掉,用 == 即可

if [[ "$file" == /home/dale* ]];then

# echo $file

continue

fi# cut 出絕對路徑

file_name=`echo $file | cut -d ':' -f 1`

# sed 就是把所有file_name 檔案中的dale 全部替換為user,至此達到目標

sed -i 's/dale/user/g' $

done

# 同樣,先找dale,但是這次不是在 . 即當前資料夾下找,而是在 results/ 資料夾下找

for file in `grep -rn "dale" results/`

do # 和前面思路其實差不多,只不過反其道行之,即:如果grep到的是results/開頭的,那麼說明是我們要找到的相對路徑

if [[ "$file" == results/* ]];then

echo $file

# 同樣cut出相對路徑

file_name=`echo $file | cut -d ':' -f 1`

# 同樣進行替換,不過這次我選擇將dale替換為空(等價於刪除)

sed -i 's/dale//g' $

fidone

如果想直接修改原始檔,而沒有這樣的過程,可以用下面的命令

sed -i 's/properties/property/g' build.xml

這樣,就直接修改了build.xml檔案

2023年8月27日23:26:52

子在川上曰,逝者如斯夫!

批量修改多個檔案內容的指令碼

批量修改多個檔案內容的指令碼 2010年07月30日 如果你是需要修改所有檔案的內容,則將 txt直接替換為 即可。把儲存後的bat或vbs檔案放在需要執行的目錄的根目錄下,執行後將替換掉當前目錄及其子目錄下檔案的所有需要替換的內容。以下為批處理 儲存為bat檔案,雙擊執行,使用前備份檔案。echo...

批量修改多個檔案內容的指令碼

批量修改多個檔案內容的指令碼 2010年07月30日 如果你是需要修改所有檔案的內容,則將 txt直接替換為 即可。把儲存後的bat或vbs檔案放在需要執行的目錄的根目錄下,執行後將替換掉當前目錄及其子目錄下檔案的所有需要替換的內容。以下為批處理 儲存為bat檔案,雙擊執行,使用前備份檔案。echo...

shell 批量替換多個檔案中字串

用sed命令可以批量替換多個檔案中的字串。sed i s 原字串 新字串 g grep 原字串 rl 所在目錄 例如 我要把mahuinan替換為huinanma,執行命令 sed i s mahuinan huinanma g grep mahuinan rl www 這是目前linux最簡單的批...