2012-08-07 5 views
2

내가 좋아하는 쉘 스크립트가 작동하지 않습니다. 왜 이런거야?글로벌 대체 쉘 스크립트는

+2

작은 따옴표 안의'''$ 1'과'$ 2'는 아마도 여러분이 의미하는 바가 아닙니다. –

답변

2

큰 따옴표 대신 작은 따옴표를 사용하는 것이 문제입니다. 작은 따옴표를 사용하면 sed은 문자열을 문자 그대로 해석합니다 (즉, 첫 번째 인수가 아닌 $1 문자열을 검색합니다).

다음은 수행하려고 시도했던 기능 버전입니다. 임시 파일 사용을 sed의 "in-place"편집으로 대체했습니다.

for fl in /home/dr/*.txt 
do 
    sed -i "s#$1#$2#g" $fl 
done 

그러나 당신이 할 수있는 한 줄의 모든!

sed -i "s#$1#$2#g" /home/dr/*.txt 
+0

좋은 답변 주셔서 감사합니다. $ 1에 '/'기호가 있으면 문제가 발생합니까? 이것이 내가 # 기호를 사용하는 이유입니다. 그리고 '입니다.' 의도적으로 txt에서 생략 되었습니까? – dukevin

+0

예, 문제가 생길 수 있으며, 그 이유는'#'이 훨씬 더 나은 선택입니다. 그 죄송합니다. 나는 단지 슬래시를 습관의 힘으로 사용한다. –

+0

아니, 생략 된'.'은 내 실수로 인해 버려졌습니다. 좋은 캐치와 사과. –

3

당신이 (GNU가 나오지도)에 대한이 작동하지 않을 수 있습니다 : 당신이 있었다

sed -i "s#$1#$2#g" /home/dr*.txt 

문제는 주위 보간을 허용하지 않는 명령을 나오지 작은 따옴표입니다.

+0

! 이것은 작동하도록했습니다 – dukevin

+0

당신이 틀린 대답을 받아 들인 것처럼 보입니다. * 받아 들여지는 대답은 깨졌습니다. –

+1

@Henk : 고쳐! –

관련 문제