2016-10-25 2 views
0

sed 명령을 사용하여 소스 문자열에서 대상 문자열을 추출하고 싶습니다.C 프로그램에서 sed를 사용할 때 "알 수없는 이스케이프 시퀀스"경고

명령이 Linux 셸에서 실행중인 경우 제대로 작동합니다. 여기

echo A=B | sed -e 's/.*=\(.*\)/\1/' 

이 명령은 "="이후에 문자열을 추출하고, 그 결과는 문자열 "B"이고, 예이다. 이 명령 등

popen("echo A=B | sed -e 's/.*=\(.*\)/\1/'", "r") 

하는 C 프로그램에서 호출되는 경우 상태를 컴파일

그러나, 경고 메시지 {"warning: unknown escape sequence: '\)'} 도시된다.

'\)' 앞에 백 슬래시를 추가하라는 제안이 있지만이 경우에는 작동하지 않습니다. 아무도 이것을 해결하는 방법을 알고 있습니까?

P. 코드를 popen("echo A=B | sed -e 's/.*=\\(.*\\)/\\1/'", "r")로 유도하는 모든 '\'앞에 백 슬래시를 추가하면 작동합니다.
그러나 결과는 "B"대신 "B \ n"이고 접미사 "\ n"을 제거 할 수있는 방법이 있습니까?

+0

은 당신 때문에 특수 문자를 이스케이프 할 필요가 1''\ ''을 원한다면''\\ ''을 써야합니다. \\ * \\)/\\ 1/' ","r ")' – mch

+1

다른 \를 앞에 추가하십시오. * \의 모든 발생. –

+0

'fopen' 대신'popen'을 사용합니까? –

답변

1

음, 문제는 문자열의 진정한 탈출을 생산하는 이스케이프 문자 \을 두 배로해야한다는 것입니다, 그래서 당신은 작성해야합니다 : C에서

popen("echo A=B | sed -e 's/.*=\\(.*\\)/\\1/'", "r"); 
관련 문제