2017-06-02 39 views
-1

我有腳本。在這個腳本中,我搜索並替換了單詞。一字一句直到單詞'結束'。這是可以的,它的工作原理。你可以看到我的腳本的身體:如何通過bash在文件中進行多個搜索和替換

#!/bin/bash 

end=end 
until [ "$first" = "$end" ];do 
    echo "please write first word";  
    read first 
    if grep -q "$first" *txt; then 
     echo "word is exists" 
     grep "$first" *txt 
     echo "please write second word";  
     read second 
     sed -i 's/'"$first"'/'"$second"'/g' *txt 
    else 
     echo "second word does not exists" 
     exit 1 
    fi 
done 

它適合我。我有在結果控制檯,我可以無休止地循環單詞,但如果我想要做這樣的事情:我怎麼能寫多行字。

例如:「狗」,「貓」,「魚」

,搜索和替換所有的這些話。怎麼辦?例如,如果我需要替換這些詞(「elephat」,「鼠標」,「鳥」)。你怎麼能這樣做? 我的意思是搜索和替換單詞,如參數。

+0

你的意思是接受單詞來替換爲參數?或者從文件中讀取它們? – airos

+1

你必須學會​​縮進。我要編輯。爲了愛上帝,以可讀的方式編碼。 – SaintHax

+0

我的意思是接受像爭論的話 – Piduna

回答

0

你的英語很粗糙,但我認爲你希望能夠提示多個單詞,並用新的單詞替換它們?

下面的代碼將讓您運行一個程序,如replace_words one two three,然後提示您輸入要替換的單詞列表,例如, 1 2 3。之後,它退出。

declare -a replace_list=("[email protected]") # get the replace list as passed arguments 
echo -n "Enter words to replace with: ";  read -ra sub_list 
for ((i=0; i < "${#replace_list[@]}"; ++i)); do 
    if grep -q "${replace_list[$i]}" *txt; then 
     echo "first word is exists" 
     sed -i "s/${replace_list[$i]}/${sub_list[$i]}/g" *txt 
    else 
     echo "${replace_list[$i]} does not exists" 
     exit 1 
    fi 
done 
0

你只需要一個循環來處理參數。

假設您運行傳遞對原有的替換詞(myscript.sh original_word1 replacement1 original_word2 replacement2 ...)這將是類似下面的腳本:

while [[ $# -gt 1 ]] 
do 
    original="$1" 
    replacement="$2" 

    # your code for actually replacing $original with $replacement 

    shift # discard already processed original arg 
    shift # discard already processed replacement arg 
done 

注意的是,如果用戶通過最後的原始單詞無替換腳本將忽略它

相關問題