2014-12-08 2 views
1

".properties"파일에서 값을 얻는 스크립트가 있습니다. 그것은 단순한 문자열 인 경우 값을 성공적으로 대체하지만 ('\')와 같은 이스케이프 문자가 포함 된 경우 작동하지 않습니다. 아무도 지적 할 수있는 무엇을, 나는 인터넷에서 검색했지만 "REGEX"를 이해할 수 없습니다.Sed 명령으로 문자열을 특수 문자로 바꿀 수 없습니다.

스크립트 파일 :

#!/bin/bash 
# Omer's First Script 
#Include Properties File 
. directoryPaths.properties 
echo "Start" 

sed -i "s/DONEDIRECTORY/$DoneDirectory/" *TestFile* 



echo "finish" 

directoryPaths.properties

DoneDirectory=/home/omerkhalid/Documents/Test/Done 

TestFile.txt는

이 테스트 문서입니다.

DONEDIRECTORY

오류 :

sed: -e expression #1, char 18: unknown option to `s' 

참고 : 내가 즉 "완료"단순한 문자열에 "DoneDirectory"의 값을 변경하는 경우, 그것은 잘 작동합니다. 그러나 "/"이스케이프 문자는 작동하지 않습니다.

답변

5

문제점은 sed 명령과 다르지만 변수 내용이 $DoneDirectory입니다. SED 명령

sed -i "s/DONEDIRECTORY/$DoneDirectory/" *TestFile* 

/에서

sed 거기 상기 delimitter로 사용되는 다음의 명령 만 s 3 슬래시를 기대한다. 변수 $DoneDirectory가 대체됩니다하지만 일단 거기에 8

솔루션

를 사용하여 변수 $DoneDirectory 이후

sed -i "s#DONEDIRECTORY#$DoneDirectory#" *TestFile* 
2

같은 sed에서 다른 분리 문자를 오류를 제공 /의 나오지 기본 명령 구분 기호 /을 포함 다른 구분 기호를 사용합니다 :

sed -i "s#DONEDIRECTORY#$DoneDirectory#" *TestFile* 
1

나는 sed가이 직업에 적합한 도구가 아니라고 주장 할 것이다. 물론 다른 구분 기호로 작업 할 수는 있지만 다른 구분 기호가 문자열 (또는 백 슬래시 또는 sed가 해석하는 다른 문자)에 나타나면 여전히 폭발 할 것입니다.

awk -v subst="$DoneDirectory" '{ sub("DONEDIRECTORY", subst); print $0 }' TestFile 

참고 : 한 줄에 두 번 이상 표시 할 수 gsub 대신 subDONEDIRECTORY 경우를 사용하고 모두는 교체해야 나는 AWK가 더 적합 믿습니다.

관련 문제