2013-05-10 2 views
1

다음은 의미를 찾으려는 셸 스크립트입니다. 예기치 않은 결과를주는 Sed 명령

sed 's/19984 $/98400 /' | sed 's/19992 $/99200 /' 

나는 19,984 $이 98400으로 대체 얻을 것으로 기대하고이 문자열은 99,200와 19,992 $를 대체하는 다음의 sed 명령에 전달됩니다. 내가 샘플 입력

echo "19984 $ need to be replaced with 98400 "| sed 's/19984 $/98400 /' | sed 's/19992 $/99200 /' 

에 아래의 스크립트를 실행하는 경우

는하지만

"19984 $ need to be replaced with 98400" 

은 내가 여기에 놓친 거지 뭔가 희망 같은 문자열을 얻을. 도와주세요. 나는 쉘 스크립트가 처음이다. 미리 감사드립니다. 당신이 그것을 탈출해야에 나오지도 들어

답변

1

$는 예약 문자 (\$가) 제대로 분석 할 수 :

$ echo "19984 $ need to be replaced with 98400 "| sed 's/19984 \$/98400 /' 
98400 need to be replaced with 98400 

을 모두 함께 :

$ echo "19984 $ need to be replaced with 98400 "| sed 's/19984 \$/98400 /' | sed 's/19992 \$/99200 /' 
98400 need to be replaced with 98400 

그래서 당신이 필요 그것을 그대로 유지하십시오.

$은 많은 것을 의미 할 수 있습니다.
- 정상적인 문자.
- 줄의 끝.
- 변수의 이름입니다.

코드를 가지고하는 방법은이 두 번째 경우를 의미 : 라인의 끝 : 그래서 라인이 19984로 종료되는 단지의 경우와 일치합니다 나오지

$ echo "19984 " | sed 's/19984 $/98400 /' 
98400 
$ echo "19984 something" | sed 's/19984 $/98400 /' 
19984 something 

합니다. 그렇지 않으면 일치하지 않습니다.

+0

좋습니다. 그러나 나는 그들이 코드를 그대로 유지 한 오래된 코드를 연구 중이다. 그렇다면 그들은 무엇을 의미했을까요? –

+0

방금 ​​내 대답을 업데이트했습니다. 원래 코드는 줄의 끝을 의미하며, 예제가 그것을 이해하는 데 도움이되기를 바랍니다. – fedorqui

+1

그게 내가 찾고있는거야! Fedorqui 아주 고맙습니다. –