2012-06-18 4 views
1

이 질문은 awk와 관련이 있습니다. awk에 대한 경험이 없습니다. 나는 많은 것을 시도했지만 어떤 해결책도 찾을 수 없었다.awk에서 이스케이프 문자를 피하는 방법

사실, 필자는 파일을 한 줄씩 읽은 다음 전체 줄을 perl로 바꾸기를 원합니다.

나는 코드를 단순화했다. 네가 이해할 수 있기를 바랍니다.

new_line1=1234567 
new_line2=1234/567 

perl -pi -e "s/$new_line1/$new_line2/g" $FILE 

문제는 내가 사용할 때 / 관련이 있다는 것입니다.

Number found where operator expected at -e line 1, near "s/1234567/1234/567" 
syntax error at -e line 1, near "s/1234567/1234/567" 

배쉬는

perl -pi -e "s/1234567/1234**/**567/g" $FILE 내가 그것을 어떻게 피할 수 있다고 가정 때문입니다.

+0

왜 perl과 awk가 혼합되어 있습니까? – TLP

+0

@TLP OP가 파일을 원위치로 업데이트하려고한다고 가정합니다. GNU'sed'는이 기능을 제공하지만 GNU'awk'는 그렇지 않습니다. – JRFerguson

답변

4

당신이 탈출하지 않으려면 /에서 다른 구분 기호를 사용하여

perl -pi -e "s#$new_line1#$new_line2#g" $FILE 
0

당신이 제목에 awk 언급 때문에 ...

표준 솔루션은 다른 구분 기호를 사용하는 것입니다 . 불행하게도, AWK에서 당신은 직관적 인 일을하고 구분 기호로 @를 사용하는 \@[email protected] 쓰기,하지만 당신은 명시 적으로 match를 호출 할 수 없습니다 중 하나 new_line1 또는 new_line2"이 포함 된 경우

awk 'match($0, "'$new_line1'") { print "'$new_line2'"; next } 1' $FILE 

이 작동하지 않습니다. 파일을 편집하지 않습니다. (perl -i도 실제로 새로운 파일을 생성하기 때문에 마찬가지입니다.)

관련 문제