획득한 IP를 "hosts"라는 파일에 저장하는 핑 스캐너를 만들었습니다. 그런 다음 파일에서 내 IP 주소를 제거하고 싶었지만 내 IP 주소가 무엇인지 몰랐으므로 다음을 수행해 보았습니다.
alias ownip='hostname -I'
sed ownip ./host
이 방법이 작동하지 않아 다음 오류가 발생합니다.
sed: -e expression #1, char 1: unknown command: `o'
그렇다면 파일에서 내 IP를 어떻게 제거합니까?
답변1
hostname -I
입력 "호스트" 파일이 한 줄에 하나의 IP 주소가 있는 파일이고 파일에 출력된 모든 IP 주소를 제거하려면 다음을 시도하십시오.
sed -i "$(hostname -I | sed 's/\([.:[:xdigit:]]\{1,\}\)/\/\1\/d;/g')" ./host
명령에 파이프된 호스트 이름은 호스트 이름으로 출력된 IP 주소를 외부 sed로 변환하는 sed 내부의 sed 제거 명령을 대체합니다. Sed의 i
플래그는 sed에게 사용자가 제공한 파일을 덮어쓰도록 지시합니다. 출력이 올바른지 확인하기 위해 먼저 이 플래그 없이 실행하거나 i
해당 인수를 접미사로 사용하여 입력 파일의 백업을 생성하도록 sed에 지시하는 인수를 sed에 제공할 수 있습니다. 예를 들어 -i'~'
이름이 지정된 백업이 생성됩니다 host~
. 사용 중인 sed 버전에 이 플래그가 없으면 임시 파일에 쓰고 원본 파일을 덮어쓸 수 있습니다.
sed "$(hostname -I | sed 's/\([.:[:xdigit:]]\{1,\}\)/\/\1\/d;/g')" ./host > /tmp/newhost && mv /tmp/newhost ./host
내 생각 i
엔 어쨌든 뒤에서 무슨 일이 벌어지고 있는 것 같아.
별칭을 사용하려면 별칭은 단지첫 번째 명령어인 경우 텍스트 교체따라서 원래 예에서는 명령 대체를 사용해야 합니다. 즉 $(ownip)를 사용하여 실제로 별칭을 실행한 결과를 sed에 제공해야 합니다. 오류 메시지는 sed가 "ownip"을 스크립트로 사용하려고 한다는 것을 의미합니다. 이 경우 sed에 "o" 명령이 없기 때문에 오류가 발생합니다.
답변2
나는 사용한다:
ip a | grep inet | awk '{print $2}'
로컬 주소를 사용하지 않으려면 추가 grep -v 127
.
답변3
별칭을 trim
공백으로 약간 수정한 다음 ownip
별칭을 사용하여 삭제 명령도 생성합니다.
alias ownip='hostname -I | xargs'
sed -e "$(ownip | sed -e 's/[.]/[.]/g;s|.*|/&/d;|')" yourhostsfile