使用 sed 替换行中的多个单词时出错

使用 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 ...

或者,您可以使用一个(且仅一个)sed表达式,在这种情况下,您可以省略-e并使用;或 换行符来分隔该表达式中的命令:

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

或者

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

相关内容