내 파일 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