首頁 » bash 手札
2009/01/13

[bash] 尋找目錄下檔案裡某特定的字串,並移除它們

之前遇到了要處理一堆名單檔的需求,其中有個常態性需求是:「把某個使用者的資訊從近幾個月名單檔中移除」
例如:我想要把名單檔中有:m=nobody@earth.org.tw&guid=nobody 的字串完全移除:
第一次寫了

#!/usr/local/bin/bash

for month in 09 10 11 12; do
   for file in /home/abc/data/list/2008.${month}/*.list ; do
      echo 'we are processing '$file
      sed 's/m=nobody@earth.org.tw\&guid=nobody//g' ${file} > TMPFILE && mv TMPFILE ${file}
      sed '/^$/d' ${file} > TMPFILE && mv TMPFILE ${file}
   done
done


後來呢,發現不大對,上面那支會把所有的名單檔都納入考量,所以名單檔一多時,就要等很久才能執行完畢,所以又改寫了一支,如下:
主要的差異是:下方這支程式會先找出有含特定字串的檔案,再去真的把這些檔案中的特定字串移除
繼續閱讀
2008/11/08

[bash] 移除文字檔中的^M

話說文字檔內多了個^M(是dos檔的關係)要怎麼移除呢?
答案是:
tr -d \\r < dosfile > newfile
最近工作上遇到了怪怪的^M名單:
m=abc@happy.com.tw^M&hid=abc
目標是讓它變成
m=abc@happy.com.tw&hid=abc
由於很多,一個個處理的話就不是RD了,我先寫了支bash script如下來對目錄下的檔案作處理,應急一下(其實我差點忘了有這項工作,今天開會有人提到才想到,thunderbird收信、開信好像比outlook慢很多,有時懶得等,真的會漏看信的內容,真是個危險因子啊~~)
#!/usr/local/bin/bash


if [ -d ./ ]; then
for file in ./*.list ; do
tr -d \\r < $file > $file.new
rm $file
mv $file.new $file
sudo chown happy $file
sudo chgrp users $file

done
fi

有刪節線那二行是與權限相關,第一行判別是目錄是多寫的,為了以後修改時方便。
繼續閱讀
2008/08/21

[bash] changeName.sh 簡單改名稱

話說朋友D在某個神祕的地方找到了Monster Hunter 2(DOS)的音樂檔,下載了某幾個zip檔,不過在windows裡解不開,依他先前的經驗,要用Mac來解,於是我回家用Mac解開了,不過檔名中有怪字,Windows又無法讀取,一個個改又有點浪費時間,所以決定小試bash script,因為檔名有些許規則,所以蠻好寫的,結果如下:本篇作為很久沒寫blog的濫芋充數一下:p
#!/bin/bash
for ((i=1;i<250;i+=1)); do
echo -n "mv ./${i}*.mp3 ./${i}.mp3 ";
 mv ./${i}*.mp3 ./${i}.mp3 ;
done
心得:人要想要偷懶才會進步? ......  @@?
繼續閱讀
1