한 줄의 여러 단어를 바꾸기 위해 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

관련 정보