sed를 사용하여 파일에서 별칭 제거

sed를 사용하여 파일에서 별칭 제거

획득한 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

관련 정보