1行の複数の単語を置き換えるためにsedを使用中にエラーが発生しました。

1行の複数の単語を置き換えるためにsedを使用中にエラーが発生しました。

以下のスクリプトを使用してファイルの単語リストを置き換えています。

ただし、スクリプトを実行すると、次のエラーが発生します。

can't read s/@@/AU/g: No such file or directory

スクリプトの問題を教えてもらえますか?

# source the properties:
. config.properties

######## Generating test data on runtime  ###############
echo "**************************************************************************"
echo "         Test Data Generation for Markets        ..                      *"
echo "**************************************************************************"
IFS="," read -ra items <<<"$markets"

for item in "${items[@]}"
do
    Country=`echo $item|tr [a-z] [A-Z]`
    date1=$(date --date="20 day ago" +"%Y-%m-%d %H:%M")
    date2=$(date --date="400 day ago" +"%Y-%m-%d %H:%M")
    epoch1=$(date --date="20 day ago" +%s)
    epoch2=$(date --date="40 day ago" +%s)

    cp Sample_testdata testdata_$UPPER_CASE
    sed -i "s/@@/${Country}/g"  -e "s/date-20/${date1}/g" -e "s/date-400/${date2}/g" -e "s/epoch_date-20/${epoch1}/g" -e "s/epoch_date-40/${epoch2}/g" testdata_$UPPER_CASE

    echo "test data generation completed for Market :: $Country"

done

答え1

複数-eビットを使用する場合は、sed次の点を確認してください。みんな-e最初の部分を含むこれらの部分にはプレフィックスが付いています。

sed -e ... -e ... -e ... -e ...

まさか

sed ... -e ... -e ... -e ...

あるいは、1つのsed式のみを使用できます。この場合、その式のコマンドを省略し、改行を使用して-e区切ることができます。;

sed -i "s/@@/${Country}/g; s/date-20/${date1}/g; ..." file

または

sed -i "
  s/@@/${Country}/g
  s/date-20/${date1}/g
  ..." file

関連情報