2012-02-16 2 views
0

sed -e "s/foo/$bar/" -e "s/some/$text/" file.whatever을 사용하여 특정 파일의 문구를 바꿉니다. 문제는 $ bar 문자열에 /과 같은 여러 개의 특수 문자가 포함되어 있다는 것입니다. 그래서 나는이 오류라고 말하는 ... ... 다음 코드를 사용하여 텍스트 파일에 뭔가를 대체 할파일의 문구를 특수 문자가 포함 된 문자열로 바꿉니다.

#!/bin/bash 

bar="http://stackoverflow.com/" 

sed -e "s/foo/$bar/" -e "s/some/$text/ file.whatever 

을하려고하면 sed: unknown option to s 나는 그것에 대해 할 수 있나요?

답변

2

구분 기호를 사용할 수 있습니다. 예 : [email protected]@[email protected]. 또 다른 좋은 구분 기호는 세로 막대입니다. 다른 문자도 작동 할 수 있지만 정규 표현식과 같은 일부 컨텍스트에는 특별한 의미가 있습니다.

+0

그냥 '^'정규식 메타 문자, nitpick하는, 그래서 당신이 좋아하는 뭔가를 따기 더 나을 것은'|' –

+0

이 합의 @'또는', (나 같은) 사람들을 위해 원본을 편집 한 사람 지금까지만 읽을 수 있습니다 ... –

0

특히 문자열에 무엇이 포함되어 있는지 모르는 경우 사용하는 구분 기호에 관계없이 sed에서이 어려움을 겪을 수 있습니다. 쉘 변수를 도우미 인터프리터에 전달하는 다른 방법을 선택하겠습니다.

awk -v rep1="$bar" -v rep2="$text" '{sub(/foo/, rep1); sub(/some/, rep2); print}' 

또는

perl -spe 's/foo/$rep1/; s/some/$rep2/' -- -rep1="$bar" -rep2="$text" 

정확성이 경우 간략화 소중.
(reference for Perl example)

관련 문제