Modfiy 호스트 파일로 Sed

Modfiy 호스트 파일로 Sed

내 파일 modifyhostslist.txt에 있는 항목에 해당하는 항목이 포함된 텍스트 파일이 있습니다. hosts파일의 모든 항목을 hosts수정할 필요는 없으며 modifyhostslist.txt.

에서 찾은 항목은 modifyhostslist.txt파일에서 주석 처리됩니다 hosts.

예시 라인(항목)은 다음 위치에 있습니다 modifyhostslist.txt.127.0.0.1 www.domain.com

주석 처리된 순서는 다음과 같습니다.#%%#

나는 일을 끝내기 위해 그것을 사용하려고 노력했지만 sed지금까지 성공하지 못했습니다. 내 최근 시도는 다음과 같습니다.

while read line; do 
   sed -i 's/'"$line"'/#%%#'"$line"'/' /system/etc/hosts;
done < modifyhostslist.txt

또한 #%%#특정 간격으로 댓글이 삭제되어 hosts파일이 원래 상태로 복원됩니다. 주석을 삽입하는 데 사용되는 명령을 단순히 재배열하면 hosts파일의 주석을 삭제하는 데에도 사용될 수 있다고 생각됩니다 .

이 명령이 작동할 것 같지만 awk어떻게 사용하는지 잘 모르겠습니다.

답변1

다음 명령을 사용했습니다.

while read line; do 
   sed -i 's/'"$line"'/#%%#'"$line"'/' /system/etc/hosts;
done < modifyhostslist.txt

modifyhostslist.txt의 행이 의 행과 일치하는 한 /system/etc/hosts명령은 작동합니다.

줄이 동일해 보이지만 명령이 여전히 작동하지 않으면 (보이지 않는) 줄 끝이 일치하지 않기 때문일 수 있습니다. DOS/Windows 파일에는 2문자 줄 끝이 있는 반면 Unix와 Mac은 1문자 줄 끝을 사용합니다. 이것이 문제라면 문제가 되는 문자를 제거하는 것이 해결책입니다. Unix 시스템 파일이기 때문에 hosts올바른 줄 끝이 있기를 원하므로 파일 \r에서 modifyhostslist.txt 추가 문자를 제거 해야 합니다. 이 작업은 다음과 같이 수행할 수 있습니다.

while read line; do 
   sed -i 's/'"$(echo "$line" | tr -d '\r')"'/#%%#'"$line"'/' /system/etc/hosts;
done < modifyhostslist.txt

관련 정보