PALMisLIFE 討論區

標題: 尋找可以建立字典檔多檔案內文取代字串 [列印本頁]

作者: 阿輝    時間: 2006-5-21 16:57
標題: 尋找可以建立字典檔多檔案內文取代字串
例如我一個資料夾中所有的文件

其中  aaa 字串要換成 bbb 字串、ccc 字串要換成 ddd 字串

但是要可以將替換字串事先作成字典檔的 (因為要替換的字串非常多)
作者: mfhsieh    時間: 2006-5-21 17:56
標題: Re: 尋找可以建立字典檔多檔案內文取代字串
如果有用 cygwin (windows 下的類 unix 系統) 的話,


  1. for i in *; do sed -f script $i; done
複製代碼


其中 script 是字典檔,內容大概如下

  1. s/aaa/bbb/g
  2. s/ccc/ddd/g
複製代碼


這類的批次文字處理,unix 才是王道呀!

[ 本文章最後由 mfhsieh 於 2006-5-21 17:58 編輯 ]
作者: 阿輝    時間: 2006-5-21 20:19
標題: Re: 尋找可以建立字典檔多檔案內文取代字串
原文章由 mfhsieh 於 2006-5-21 17:56 發表
如果有用 cygwin (windows 下的類 unix 系統) 的話,


  1. for i in *; do sed -f script $i; done
複製代碼


其中 script 是字典檔,內容大概如下

  1. s/aaa/bbb/g
  2. s/ccc/ddd/g
複製代碼


這類的批次文字處理,unix 才是王道呀!


不太瞭解指令細節
這樣連子目錄中的檔案都會一併處理嗎?
作者: mfhsieh    時間: 2006-5-21 21:48
標題: Re: 尋找可以建立字典檔多檔案內文取代字串
原文章由 阿輝 於 2006-5-21 20:19 發表
不太瞭解指令細節
這樣連子目錄中的檔案都會一併處理嗎?


原來的指令不很完整。sorry,重新寫一下。

如果所有要替換的檔案都在 /dir/replace 下 (含子目錄),那在 /dir 下創建兩個檔案。

dirsed.sh:

  1. #!/bin/bash

  2. for i in $1; do
  3.   if [ -f $i ]; then
  4.     sed -f script $i > $i.new
  5.     rm $i
  6.     mv $i.new $i
  7.   fi
  8. done
複製代碼


這內容主要是說,把 dirsed.sh 的第一個參數 ($1,目錄名) 內的所有檔案 ($i,單指檔案,不含目錄),用 sed 把 script 的指令執行後,輸出成 $i.new 檔,然後把 $i 殺掉,再把 $i.new 命名為 $i。

script:

  1. s/aaa/bbb/g
  2. s/ccc/ddd/g
複製代碼


這是 sed 的指令檔,s 是表替換這個動作,把 aaa 換成 bbb,把 ccc 換成 ddd。而且加上 "g" 這個全域選項,意指把所有的字串都替換 (s 這個動作預設只替換一次)。

然後,先 cd 到 /dir 這個目錄,再執行

  1. find ./replace -type d -exec ./dirsed.sh {} \;
複製代碼


這是用 find 把 /dir/replace 以下的所有子目錄 (-type d) 都找出來,送給 -exec 後的指令 (用 \; 標示指令的終結,用
{} 標示所找到的子目錄名)。

[ 本文章最後由 mfhsieh 於 2006-5-21 21:57 編輯 ]




歡迎光臨 PALMisLIFE 討論區 (http://f.pil.tw/) Powered by Discuz! X2.5