2017-06-02 12 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

引数を処理するにはループが必要です。ユーザが最後に合格した場合という

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 

注:それは、次のようなものになるだろう(myscript.sh original_word1 replacement1 original_word2 replacement2 ...)オリジナルの交換用の単語のペアを渡してスクリプトを実行すると仮定すると、

元の単語を置換せずにスクリプトはそれを無視します

関連する問題