.txt 파일의 IP를 호스트로 바꾸십시오.

.txt 파일의 IP를 호스트로 바꾸십시오.

이라는 하위 폴더 에 약 14,800개의 파일이 흩어져 있습니다 /actlogs/. 이 파일의 첫 번째 줄에는 다음과 같은 링크가 포함되어 있습니다.

http://server.com/file.pdf

"server.com" 문자열을 "server.com"의 실제 IP 주소로 바꿔야 합니다.

/actlogs/ 및 하위 폴더에서 *.log를 찾고 각 파일에 대해 호스트를 해당 IP로 바꿀 수 있는 방법이 있습니까?

우분투 서버 18.04를 사용하고 있습니다.

답변1

이것은 직업처럼 들립니다 sed.

sed 's/server\.com/192.168.0.1/' *.log

sed입력을 한 줄씩 처리하는 스트림 편집기입니다. 여기서는 s대체 명령을 사용하고 있습니다 s/regex/replacement/flags. 이것이 원하는 것이라고 확신하면 플래그를 추가하여 i변경 사항이 "제자리에" 적용되도록 할 수 있습니다. *쉘에서 glob을 수행 하고 .logsed로 끝나는 모든 파일을 sed에 대한 입력으로 전달합니다.

sed 's/server\.com/192.168.0.1/' *.log

이는 각 줄에서 처음 나타나는 패턴만 대체한다는 점에 유의하세요. 발생 위치에 관계없이 모든 항목을 바꾸려면 전역 플래그를 사용할 수 있습니다.

sed 's/server\.com/192.168.0.1/g' *.log

검색해야 하는 디렉터리 계층 구조의 경우 결과를 사용 find하고 실행할 수 있습니다.sed

find /home/www/ -type f -name '*.log' -exec \
    sed 's/server\.com/192.168.0.1/g' {} +

답변2

이 작업을 수행해야 합니다.

find . -type f -name "*.log" -exec sed 's/server\.com/192.168.0.1/g' {} +

답변3

@ user1774469의 정답에 추가하여 bash를 사용하여 log 아래의 모든 하위 폴더에 있는 파일의 문자열을 바꿀 수 있도록 하려면 *.log다음을 수행하면 됩니다.

1) globstar쉘 옵션 활성화:

shopt -s globstar

2) @user1774469로 올바른 명령을 실행하고 다음과 같이 수정합니다.

sed 's/server\.com/192.168.0.1/' /actlogs/**/*.log

.log그런 다음 디렉토리 의 어느 위치에서나 해당 확장자를 가진 모든 파일을 일치시킵니다 /actlogs/.

관련 정보