500 개의 IP 주소 목록이있는 텍스트 파일을 열려고합니다. 다음 줄 중 하나를 변경하고 파일을 저장하려고합니다. 그것은 awk 또는 sed로 할 수 있습니까?awk를 사용하여 텍스트 파일의 행을 바꾸고 저장하십시오.
현재 행 :
100.72.78.46:1900
변경 :
100.72.78.46:1800
500 개의 IP 주소 목록이있는 텍스트 파일을 열려고합니다. 다음 줄 중 하나를 변경하고 파일을 저장하려고합니다. 그것은 awk 또는 sed로 할 수 있습니까?awk를 사용하여 텍스트 파일의 행을 바꾸고 저장하십시오.
현재 행 :
100.72.78.46:1900
변경 :
100.72.78.46:1800
다음에 그것을 얻을 수 있습니다
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
다양한 입력 파일 내용이 주어지면 실패합니다. 예를 들어'72100372578146 : 190032'을'72100.72.78.46 : 180032'로 변환합니다. 원하는 텍스트를 찾기/바꾸기는 항상 쉽지만 원하지 않는 텍스트를 찾지/변경하기가 훨씬 더 어렵고 작은 샘플 입력이있을 때 예상되는 출력을 생성하는 스크립트는 솔루션을 찾는 출발점 일뿐 아니라 종점. 화창한 날의 사건뿐만 아니라 처리하기 힘들고 발견되거나 변경되기를 원하지 않는 케이스를 고려하여 샘플 입력/출력을 게시 할 때 약간의 노력을 기울이는 것이 중요합니다. –
네, 당신은 절대적으로 옳습니다. 좀 더 일반적인 의미로 작동하도록 내 답변을 수정하겠습니다. 감사! –
가능한 중복 :
마지막으로, 나는 또한 당신이 줄에 하나 개의 IP 주소를 가지고 있다면, 당신은 또한 잘못된 교체를 방지 시작과 라인의 끝 문자에 대한 특수 문자를
^$
을 사용할 수 있음을 깨달았 [전체 줄을 sed로 바꾸는 방법?] (http://stackoverflow.com/questions/8822097/how-to-replace-whole-line-with-sed) – hek2mgl"그 일을 할 수 있습니까? with awk "텍스트 조작에 관한 질문은"예 "입니다. [ask]를 읽으십시오. –