이라는 하위 폴더 에 약 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을 수행 하고 .log
sed로 끝나는 모든 파일을 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/
.