PALMisLIFE 討論區

搜索
鹹魚爸魅力四射舞蹈教室
查看: 3263|回復: 3

尋找可以建立字典檔多檔案內文取代字串

[複製鏈接]

3867

主題

126

好友

2626

積分

  • TA的每日心情

    2011-4-12 00:15
  • 簽到天數: 3 天

    連續簽到: 2 天

    [LV.2]偶爾看看I

    文章
    35006
    發表於 2006-5-21 16:57 |顯示全部樓層
    例如我一個資料夾中所有的文件

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

    但是要可以將替換字串事先作成字典檔的 (因為要替換的字串非常多)
    阿輝攝影記錄服務 | 婚禮記錄 | 活動拍攝
    http://www.giorno.tw/

    218

    主題

    9

    好友

    3516

    積分

    我沒有頭銜!

  • TA的每日心情
    開心
    2011-8-12 07:38
  • 簽到天數: 110 天

    連續簽到: 3 天

    [LV.6]常住居民II

    文章
    2679
    發表於 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 編輯 ]
    回復

    使用道具 舉報

    3867

    主題

    126

    好友

    2626

    積分

  • TA的每日心情

    2011-4-12 00:15
  • 簽到天數: 3 天

    連續簽到: 2 天

    [LV.2]偶爾看看I

    文章
    35006
    發表於 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 才是王道呀!


    不太瞭解指令細節
    這樣連子目錄中的檔案都會一併處理嗎?
    阿輝攝影記錄服務 | 婚禮記錄 | 活動拍攝
    http://www.giorno.tw/
    回復

    使用道具 舉報

    218

    主題

    9

    好友

    3516

    積分

    我沒有頭銜!

  • TA的每日心情
    開心
    2011-8-12 07:38
  • 簽到天數: 110 天

    連續簽到: 3 天

    [LV.6]常住居民II

    文章
    2679
    發表於 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 掌上生活      下載:更快、更棒、更好玩

    GMT+8, 2024-12-26 09:21 , Processed in 0.028953 second(s), 32 queries , Gzip On.

    Powered by Discuz!

    © 2001-2012 Comsenz Inc. style by eisdl

    回頂部