2016-06-18 4 views
0

500 개의 IP 주소 목록이있는 텍스트 파일을 열려고합니다. 다음 줄 중 하나를 변경하고 파일을 저장하려고합니다. 그것은 awk 또는 sed로 할 수 있습니까?awk를 사용하여 텍스트 파일의 행을 바꾸고 저장하십시오.

현재 행 :

100.72.78.46:1900

변경 :

100.72.78.46:1800

+2

가능한 중복 :

마지막으로, 나는 또한 당신이 줄에 하나 개의 IP 주소를 가지고 있다면, 당신은 또한 잘못된 교체를 방지 시작과 라인의 끝 문자에 대한 특수 문자를 ^$을 사용할 수 있음을 깨달았 [전체 줄을 sed로 바꾸는 방법?] (http://stackoverflow.com/questions/8822097/how-to-replace-whole-line-with-sed) – hek2mgl

+0

"그 일을 할 수 있습니까? with awk "텍스트 조작에 관한 질문은"예 "입니다. [ask]를 읽으십시오. –

답변

0

다음에 그것을 얻을 수 있습니다

sed -ie 's/100.72.78.46:1900/100.72.78.46:1800/' file.txt 

i 옵션은 원본 파일을 업데이트하고 백업 파일이 생성됩니다. 이렇게하면 패턴의 첫 번째 항목 만 편집됩니다. 모든 일치하는 패턴을 바꾸려면, (의견에 지점 밖으로) 그러나, 마지막 /

이 솔루션 후 g을 추가 72100.72.78.46:180032로 변환 것 같은 72100372578146:190032 많은 다른 경우에 실패합니다.

것을 회피하려면 정확히 일치를해야 할 것, 또한 하지. 등의 특수 문자를 처리 (here 참조)

sed -ie 's/\<100\.72\.78\.46:1900\>/100.72.78.46:1800/g' file.txt 

참고 \.\<...\> "단어 경계 "정확히 일치하는 표기법. 이 솔루션은 Linux 머신에서 작동했지만 MAC에서는 작동하지 않았습니다. 이를 위해, 당신은 (here 참조) 약간 다른 구문을 사용해야합니다 :

sed -ie 's/[[:<:]]100\.72\.78\.46:1900[[:>:]]/100.72.78.46:1800/g' file.txt 

[[:<:]]...[[:>:]] 당신에게 정확한 일치를 줄 것이다 곳.

sed -ie 's/^100\.72\.78\.46:1900$/100.72.78.46:1800/g' file.txt 
+0

다양한 입력 파일 내용이 주어지면 실패합니다. 예를 들어'72100372578146 : 190032'을'72100.72.78.46 : 180032'로 변환합니다. 원하는 텍스트를 찾기/바꾸기는 항상 쉽지만 원하지 않는 텍스트를 찾지/변경하기가 훨씬 더 어렵고 작은 샘플 입력이있을 때 예상되는 출력을 생성하는 스크립트는 솔루션을 찾는 출발점 일뿐 아니라 종점. 화창한 날의 사건뿐만 아니라 처리하기 힘들고 발견되거나 변경되기를 원하지 않는 케이스를 고려하여 샘플 입력/출력을 게시 할 때 약간의 노력을 기울이는 것이 중요합니다. –

+1

네, 당신은 절대적으로 옳습니다. 좀 더 일반적인 의미로 작동하도록 내 답변을 수정하겠습니다. 감사! –

관련 문제