sed
텍스트 파일을 검색하고 다음으로 바꾸는 명령을 사용해야 합니다 $Date$
. $Date: 2021-01-06... $
날짜 텍스트는 어디에 있습니까?...
sed
다음을 검색 Date
하고 바꾸는 명령이 있습니다 Date: 2021-01-06...
.
sed "s/Date/Date $(date)/"
sed
하지만 교체 명령을 받을 수 없습니다 $Date$
.
또한 using을 sed
바꾸는 명령을 얻을 수 있었지만 검색 및 바꾸기의 구문을 알 수 없습니다 .$Date
sed "s/\$Date/\$Date $(date)/"
$Date$
나는 시도했다:
sed "s/\$Date\$/\$Date $(date) \$/"
하지만 작동하지 않습니다.
답변1
시도해 보았지만
sed "s/\$Date\$/\$Date $(date) \$/"
작동하지 않습니다.
\$
큰 따옴표는 쉘에게 해석 (확장) 하지 말라고 지시할 뿐 $
아니라 ( 확장 대상을 나타냄 ) 두 번째 것을 줄 끝과 일치하는 앵커로 해석 sed
합니다 . In은 끝에서만 기준점으로 해석됩니다 . 따라서 이 특정 항목도 이스케이프해야 합니다 . 즉, 문자 그대로 가져와야 합니다 . 이는 다음을 통해 수행할 수 있습니다.s/$Date$/$Date … $/
…
$(date)
$
s/regexp/replacement/
$
regexp
$
sed
sed
\$
sed "s/\$Date\\$/\$Date $(date) \$/"
또는
sed "s/\$Date\\\$/\$Date $(date) \$/"
$
/
앞의 큰따옴표는 이스케이프 처리할 필요가 없고(그러나 그럴 수도 있음) 큰따옴표가 \
필요할 수 있으므로 두 개 또는 세 개의 백슬래시와 함께 작동합니다 . \\
이것은 약간 복잡하므로 큰따옴표가 필요하지 않은 작은따옴표로 모든 조각을 인용하는 것을 고려하십시오.
sed 's/$Date\$/$Date '"$(date)"' $/'
여기에 $
도달해야 하는 모든 문자는 작은따옴표입니다. 도달해야 하는 sed
유일한 문자 도 작은따옴표입니다.\
sed
답변2
백슬래시를 줄이기 위해 GNU sed
확장 정규식 모드를 켭니다 -E
. 또한 역따옴표 대괄호를 사용하여 s/// 명령의 오른쪽 부분을 더욱 줄입니다. 또한 문자 클래스에서 달러를 사용하는 것은 [...]
리터럴로 처리됩니다.
sed -Ee "s/([\$]Date)([\$])/\1 $(date) \2/"
또는 다음과 같이 수행할 수 있습니다.
sed -e '/\($Date\)\$/ '"s//\1 $(date) \$/"