2012-01-19 5 views
1

sed를 처음 사용합니다.sed를 사용하여 텍스트 파일에서 찾기 및 바꾸기

나는 텍스트 파일을 가지고 있고이 문자열의 발생 교체하려면이 문자열로

allow ^127\.0\.0\.1$ 

을 : 내가 사용

allow ^107\.21\.206\.35$ 

코드가 있었다 다음

sed 's/allow ^127\.0\.0\.1$/allow ^107\.21\.206\.35$/g' test.txt 

그러나 ID가 작동하지 않았습니다. 나는 무엇을 잘못 했는가?

감사

+0

파일 자체를 변경 하시겠습니까? 그렇다면'-i' 옵션이 필요합니다. – cmbuckley

답변

0

뿐만 아니라 \뿐만 아니라 . (정규 표현식은 "단일 문자와 일치"와 같은 . 치료) (또 다른 백 슬래시). ^$ 문자는 정규 표현식에도 예약되어 있습니다. 바꾸기 문자열에서

$ echo "allow ^127\.0\.0\.1$" > /tmp/test 
$ cat /tmp/test 
allow ^127\.0\.0\.1$ 
$ sed 's/allow \^127\\\.0\\\.0\\\.1\$/allow ^107\\.21\\.206\\.35$/g' -i /tmp/test 
$ cat /tmp/test 
allow ^107.21.206.35$ 

\ 그렇지 않으면 하나의 \가에 . 다음 벗어날 것 탈출해야합니다.

+0

매력처럼 작동 –

+0

@potong 좋은 점, 위의 예에서는 sed의 정규 표현식에서 첫 번째'^'를 이스케이프 처리 할 필요가 없습니다. 그러나'^'는 집합 내의 부정 연산자이기도하며 그 문맥에서도 이스케이프해야합니다. – Andy

1

당신은 '^'와 '$'탈출해야합니다

 
$ sed 's/allow \^127\.0\.0\.1\$/allow \^107\.21\.206\.35\$/g' test.txt 

이스케이프는 '^'줄의 시작과 일치하고, '$'는 줄의 끝과 일치합니다. 문자를 정확하게 일치 시키려면 '\'문자로 이스케이프 처리해야합니다. sed를 사용하는 기본적인 정규 표현식의 대부분 구현하는 다음과 같은 문자 그대로 일치하도록 이스케이프해야합니다 : ^.[$()|*+?{\

+0

고맙습니다 .. 시도했는데 작동하지 않았습니다 .. 코드를 붙여 넣었습니다 –

+0

@Monty : 입력 텍스트에 문자 '\'가 있음을 알지 못했습니다. –

0

이 당신을 위해 작동 될 수 있습니다

echo 'allow ^127\.0\.0\.1$' | 
sed 's/allow ^127\\.0\\.0\\.1\$/allow ^107\\.21\\.206\\.35$/' 
allow ^107\.21\.206\.35$ 

^$ 만에 탈출해야 대체 명령이 문자열의 앞과 뒤에 각각있는 경우 대체 명령의 일부와 일치시킵니다. \은 경기와 교체에서 모두 이스케이프해야합니다. 당신은 탈출해야

관련 문제