.sed 파일을 사용하고 .bash 파일에서 해당 .sed 파일을 호출하는 동안 sed를 사용하여 단어를 찾아 현재 날짜로 바꾸시겠습니까?

.sed 파일을 사용하고 .bash 파일에서 해당 .sed 파일을 호출하는 동안 sed를 사용하여 단어를 찾아 현재 날짜로 바꾸시겠습니까?

.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"

관련 정보