sed 명령은 $Date$를 $Date: 2021-01-06으로 바꿉니다.

sed 명령은 $Date$를 $Date: 2021-01-06으로 바꿉니다.

sed텍스트 파일을 검색하고 다음으로 바꾸는 명령을 사용해야 합니다 $Date$. $Date: 2021-01-06... $ 날짜 텍스트는 어디에 있습니까?...

sed다음을 검색 Date하고 바꾸는 명령이 있습니다 Date: 2021-01-06....

sed "s/Date/Date $(date)/"

sed하지만 교체 명령을 받을 수 없습니다 $Date$.

또한 using을 sed바꾸는 명령을 얻을 수 있었지만 검색 및 바꾸기의 구문을 알 수 없습니다 .$Datesed "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$sedsed\$

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) \$/"

관련 정보