2010-03-17 102 views
1

我需要寫一個shell腳本來處理了近20 levels.I一個文件夾必須處理每一個文件,並檢查該文件包含像 行選擇 插入 更新shell腳本來處理文件

當我的意思是行應該採取行,直到我在該文件中找到一個分號。 我應該得到這樣

C:/test.java select * from dual 
C:/test.java select * from test 
C:/test1.java select * from tester 
C:/test1.java select * from dual 

結果等on.Right現在我有一個腳本來讀取所有文件

#!bin/ksh 

FILE=<FILEPATH to be traversed> 
TEMPFILE=<Location of Temp file> 
cd $FILE  
for f in `find . ! -type d`; 
do 
cat $FILE/addedText.txt>>$TEMPFILE/newFile.txt 
cat $f>>$TEMPFILE/newFile.txt 
rm $f 
cat $TEMPFILE/newFile.txt>>$f 
rm $TEMPFILE/newFile.txt 
done 

我有AWK不甚瞭解和sed進一步進行中讀取每個文件,並達到我想要的to.Can任何人幫我在這

+1

你的意思是包含或開頭? – 2010-03-17 06:08:29

+1

存儲的文件在哪裏? Windows還是Linux? – Guru 2010-03-17 06:14:15

+0

只有ksh shell.UNIX環境 – Harish 2010-03-17 06:16:13

回答

1

,如果你有GNU查找/呆子

find /path -type f -name "*.java" | while read -r FILE 
do 
    awk -vfile="$FILE" 'BEGIN{RS=";"} 
    /select|update|insert/{ 
    b=gensub(/(.*)(select|update|insert)(.*)/,"\\2\\3","g",$0) 
    gsub(/\n+/,"",b) 
    print file,b 
    } 
    ' "$FILE" 

done 

,如果你是在Solaris上,使用NAWK

find /path -type f -name "test*file" | while read -r FILE 
do 
    nawk -v file="$FILE" 'BEGIN{RS=";"} 
    /select/{ gsub(/.*select/,"select");gsub(/\n+/,"");print file,$0; } 
    /update/{ gsub(/.*update/,"update");gsub(/\n+/,"");print file,$0; } 
    /insert/{ gsub(/.*insert/,"insert");gsub(/\n+/,"");print file,$0; } 
    ' "$FILE" 
done 

注意,這是簡單的情況。你的SQL語句可能更復雜。

+0

厄運沒有奏效。 它說 找到:壞選項-iname 找到:path-list謂詞列表 – Harish 2010-03-17 06:37:22

+0

然後使用'-name'。 – ghostdog74 2010-03-17 06:41:10

+0

Hei感謝它的工作。如何把這個文本文件? – Harish 2010-03-17 08:13:46