2013-08-01 121 views
0

我正在編寫一個shell腳本,它在文件中查找給定的文本並將其替換爲指定的路徑,並在替換文本之後,將該文件重命名爲與給定的詞。 我在使用sed時遇到拒絕權限錯誤。我的腳本看起來像這樣使用Shell腳本和sed - 查找並替換文件中的單詞並重命名文件

`echo "Please Insert the path of the folder" 
read input_variable 

    read -p "You entered: $input_variable is correct y/n " yn 

    read -p "Enter the word to find = " word 
    read -p "Enter word to replace = " replace 
    case $yn in 
     [Yy]*) find "${input_variable}" -type f -iname "${word}.*" | while read filename; do "`echo "${filename}" | sed -i 's/$word/$replace/g' ${filename}| sed -i 's/\$word/\$replace/' ${filename}`"; done ;; 
     [Nn]*) exit;; 
     *) echo "Please answer yes or no.";; 
    esac` 

我提示以下錯誤:

bulk_rename.sh:34:bulk_rename.sh:權限被拒絕

有什麼建議?

由@vijay建議更新腳本

echo "Please Insert the path of the folder" 
read input_variable 

read -p "You entered: $input_variable is correct y/n " yn 

read -p "Enter the word to find = " word 
read -p "Enter word to replace = " replace 
case $yn in 
    [Yy]*) find "${input_variable}" -type f -iname "${word}.*" | while read filename; do 
    perl -pi -e 's/$word/$replace' ${filename} 
    mv ${filename} $word; done;; 

    [Nn]*) exit;; 
    *) echo "Please answer yes or no.";; 
esac 

後,現在我正在以下


換人更換在-e行沒有終止1

這是我得到當我chmod並顯示輸出

[email protected]:~/Documents/blog$ chmod +x bulk_rename.sh ; /bin/ls -l bulk_rename.sh 
chmod +x bulk_rename.sh ; /bin/ls -l bulk_rename.sh 
+ chmod +x bulk_rename.sh 
+ /bin/ls -l bulk_rename.sh 
-rwxrwxr-x 1 abc abc 1273 Aug 1 16:51 bulk_rename.sh 
+0

'使用chmod + X bulk_rename.sh' – devnull

+0

也許你沒有權限編輯有問題的文件。 – devnull

+0

感謝您的快速回復@devnull我已經嘗試更改權限,它給了我同樣的問題。 –

回答

1

最後我帶着我使用SED和我的問題的解決這個問題的幫助,我也問過Question

echo "Please Insert the path of the folder" 
read input_variable 

read -p "You entered: $input_variable is correct y/n " yn 

read -p "Enter the word to find = " word 
read -p "Enter word to replace = " replace 
case $yn in 
    [Yy]*) grep -r -l "$word" $input_variable | while read file; do echo $file; echo $fname; sed -i "s/\<$word\>/$replace/g" $file ; done; find "$input_variable" -type f -name "$word.*" | while read file; do dir=${file%/*}; base=${file##*/}; noext=${base%.*}; ext=${base:${#noext}}; newname=${noext/"$word"/"$replace"}$ext; echo mv "$file" "$dir/$newname"; done;; 
    [Nn]*) exit;; 
    *) echo "Please answer yes or no.";; 
esac 
0

我想你會變得很複雜: 爲什麼不用兩個簡單的句子來簡化它。它取決於你如何使用下面的語句爲你的目的:

perl -pi -e 's/wordtofind/wordtoreplace' your_file #for replacing the word in the file 

mv your_file wordtoreplace #for renaming the file 
+0

謝謝@Vijay ..我是新的shell腳本。我將擁有一個我將要編輯的文件列表。所以你推薦的是我的上面的腳本是正確的,因爲我提示用戶的一切。和sed有何不同。 –

0

變化

perl -pi -e 's/$word/$replace' ${filename} 

perl -pi -e "s/$word/$replace/" ${filename} 
--------------^----------------^^-------- 

的錯誤味精表示缺少'/」字符。


另外,你知道什麼錯誤得到你的原代碼?

請注意,您將需要dbl引號圍繞您的sed,就像在perl中一樣,所以shell可以替換值。即

..... | sed -i "s/$word/$replace/g" 
    ----------^------------------^ 

這假定有不調皮字符,尤其是/內部的$word$replace

IHTH

相關問題