2011-09-22 9 views
1

참조하십시오 다음의 간단한 명령에 사용 된 백 슬래시를 처리하기 위해? "\ U"가 먹 혔어. 다른 백 슬래시도 생존하지 못합니다.어떻게 나오지

질문은 위 명령을 예상대로 작동시키는 방법입니까?

코드가 실제 해결책이 아님을 유의하십시오. 나는 설명하기 쉽다. 변수를 사용해야하고 변수에 백 슬래시가 있어야합니다.

의견을주십시오. 고맙습니다!

XM

답변

3

을 통해 자체 TMP $를 재분석 수, 다음 시도 :

echo "a" | sed "s|a|${tmp//\\/\\\\}|g" 

혼란스러운 점이 있으십니까? \\은 쉘에서 이스케이프해야하기 때문에 하나의 \를 나타냅니다. ////s/foo/bar/gg 수식어와 유사합니다. 첫 번째 발생 패턴 만 바꾸려면 건너 뜁니다.

${parameter/pattern/string}에 대한 문서가 여기에 있습니다 :

편집 http://www.gnu.org/s/bash/manual/bash.html#Shell-Parameter-Expansion : 당신이 무엇을 원하는에 따라이 사실에 대한 나오지도 사용하지 않는 더 좋을 수 있습니다.

$ tmp="UY\U[_" 
$ in="a" 
$ echo ${in//a/$tmp} 
UY\U[_ 
+0

나는이 해결책을 골랐다. 고맙습니다! 나는 파일을 처리하는 데 sed를 사용하고있다. 암호문은 암호화 된 암호입니다. –

1

가 나오지도하고 그냥 충분 이스케이프 "먹어"에만 백 슬래시 있다면 당신은 나오지도

echo "a" | sed "s|a|$(echo ${tmp} | sed 's|\\|\\\\|g')|g" 
+0

나는이있어,이 솔루션을 시도 : $가 에코를 $ tmp를 \ UB $ 에코 "는"| sed "s | a | $ (echo $ {tmp} | sed 's | \\ | \\\\ | g') | g" \ UB 확실하지 않습니다. 파이프와 sed가 적기 때문에 다른 솔루션을 선택했습니다. 나는 아직도 당신의 대답에 감사드립니다. –

관련 문제