2015-02-04 5 views
1

을 GSUB이 줄이 있습니다 : $의 선두로부터 및 내 경우이스케이프 백 슬래시 AWK를 사용하고 난 그 수정할 수 없습니다 기존의 기능이 내 프로젝트에서

gawk -v n=$OCCURENCE "/$OLD/$EXTRA{gsub(\"$OLD\",\"$NEW\")}1" $FILE_TO_AWK

을 $ 추가, 그것은 제공 :

다른 패턴 "200 \"(기존 $) \ 반환 코드 =

gawk -v n=- "/$OLD/{gsub(\"$OLD\",\"$NEW\")}1" $FILE_TO_AWK

지금 여기에 내가이 패턴을 대체하려고 내가 과 사투를 벌인거야 부분입니다. 나는 많은 것을 시도해 왔지만 백 슬래시와 큰 따옴표 때문에 계속 실패하고있다.

내가있는 경우 :이 같은 것들을 시도

[12/12/2014 12/34] 123 /url/test.gsp 500 12234 

:

[12/12/2014 12/34] 123 /url/test.gsp ReturnCode=\"500\" 12234 

내가 이것을 가지고 싶어 할 것이라 이 gawk -v n=- "/ReturnCode=\\\"500\\\"/{gsub(\"ReturnCode=\\\"500\\\"\",\"500\")}1" fichier.txt 그것은 진수 코드를 사용

를 작동하지 않았다 042는 큰 따옴표로 작업했지만 백 슬래시는 사용하지 않았습니다 ... 도와 주시면 고맙겠습니다. 아이디어가 없습니다. 고마워!

+0

확실하지 :

하지만 실제로 생각은 "나오지도"리턴 코드를 유지하기 위해 캡처 표현으로,이 작업을위한 더 나은 도구가 될 수 있습니다 큰 따옴표'''와 백 슬래시는 특별한 정규 표현식 문자이므로 앞에서 백 슬래시를 넣음으로써 이스케이프해야합니다. 따라서 패턴은'\\\ "200 \"\\ " – streetturtle

+0

이됩니다. $ NEW에 사용하는 값은 무엇입니까? – piojo

+0

아니요, $ new는 문제가되지 않습니다. ReturnCode = \ "200 \"이 $ old 인 것으로 알고 있습니다. 그 \와 "는 스페셜 캐처 맨임을 알고 있습니다. 나는 그들을 탈출하려고했습니다. 성공하지 않고 –

답변

0

일이 까다로워 질 때 AWK 스크립트 주위에 작은 따옴표를 사용하고 변수 값을 -v OLD="$OLD" -vNEW="$NEW"으로 전달하는 것이 AWK 코드 내에서 인쇄하여 디버그하는 것이 더 쉽습니다. 내가 제대로 이해하지만, 단지 생각 나게하는 경우

MATCH='url\/test' 
OLD='ReturnCode=\\\"\([0-9]*\)\\\"' 
NEW='\1' 
sed -e "/$MATCH/ { [email protected][email protected][email protected] }" $FILE