Modfiy 호스트 파일로 Sed

Modfiy 호스트 파일로 Sed

내 파일 modifyhostslist.txt에서 찾은 항목에 해당하는 항목이 포함된 텍스트 파일이 있습니다 . hostshosts파일의 모든 항목을 수정할 필요는 없으며 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

관련 정보