.sed, .bash 및 .txt 파일이 있습니다.
x.bash 파일에 이것이 있습니다
#!/bin/bash
./y.sed "$1"
z.txt 파일에는 다음이 있습니다.
<dstamp>
y.sed 파일에는 <dstamp>를 찾아 현재 날짜로 바꾸는 이 명령이 있습니다.
#!/bin/sed -rf
s/<dstamp>/$(date '+%Y%m%d')/g
이것은 작동하지 않습니다. <dstamp>를 리터럴 $(date '+%Y%m%d')로 대체합니다.
실행해
./x.bash z.txt
output: $(date '+%Y%m%d')
그러나 명령은 터미널에서 제대로 작동합니다.
sed -r "s/<dstamp>/$(date '+%Y%m%d')/g" z.txt
output: 20221014
.sed 파일에서 이 명령이 작동하도록 하려면 어떻게 해야 합니까?
답변1
이 시도. y.sed 파일에 다음 두 줄만 있다고 가정합니다.
#!/usr/bin/sed -rf
s/<dstamp>/$(date '+%Y%m%d')/g
x.bash 파일의 검색 문자열을 업데이트하고 문자열을 변수로 대체했습니다. y.sed 파일에 다른 데이터가 있으면 x.bash 파일 마지막 줄의 echo 문에서 구성합니다. 이것은 단지 해결 방법입니다.
참고: 이 스크립트를 실행할 때 출력이 나오지 않는 경우가 있습니다. 4~5회 정도 하시고 확인해주세요.
아래는 x.bash 파일입니다.
#!/bin/bash
time_data=$(date +'%Y%m%d')
echo "Updating variable values in y.sed script"
str="<dstamp>" date_value=${time_data} envsubst '$str $date_value' < y.sed | tee /root/scripts/y.sed
echo "Setting permission to y.sed file"
chmod 755 /root/scripts/y.sed
./y.sed "$1"
echo -e '#!/usr/bin/sed -rf \n\ns/$str/$date_value/g' > y.sed
아래는 y.sed 파일입니다.
#!/usr/bin/sed -rf
s/$str/$date_value/g
다음은 z.txt 파일의 내용입니다.
Test line 1
Test line 2 with <dstamp>
Test line <dstamp> and other data
<dstamp> in Test line 3
New line <dstamp> in line 4
Test line 5
산출:
Updating variable values in y.sed script
#!/usr/bin/sed -rf
s/<dstamp>/20221015/g
Setting permission to y.sed file
Test line 1
Test line 2 with 20221015
Test line 20221015 and other data
20221015 in Test line 3
New line 20221015 in line 4
Test line 5
답변2
이미 bash 스크립트를 사용하고 있다면 sed 스크립트를 생성할 필요가 없습니다.
#!/bin/bash
sed 's/<dstamp>/'"$(date '+%Y%m%d')"'/g' "$1"