/ etc / remotedomains에서 제거해야 할 긴 도메인 이름 목록이 있습니다. 파일에서 특정 순서가 아닐 수도 있습니다. 각 도메인은 한 줄에 있습니다.
어떻게 목록을 반복하고 원격 도메인에서 해당 라인을 찾아 제거 할 수 있습니까?
/ etc / remotedomains에서 제거해야 할 긴 도메인 이름 목록이 있습니다. 파일에서 특정 순서가 아닐 수도 있습니다. 각 도메인은 한 줄에 있습니다.
어떻게 목록을 반복하고 원격 도메인에서 해당 라인을 찾아 제거 할 수 있습니까?
답변:
grep -Fxf list -v /etc/remotedomains > remotedomains.new
mv remotedomains.new /etc/remotedomains
는 -v
패턴과 일치하지 않는 경우에만 출력 라인에 GREP 알려줍니다.
는 -f list
파일에서 패턴을 읽어 GREP 알려줍니다 list
.
은 -F
(당신이 정규식 메타 문자에 문제로 실행되지 않도록) 일반 문자열이 아닌 정규 표현식으로 패턴을 해석하는 GREP 알려줍니다.
는 -x
패턴이 있다면, 예를 전체 라인에 맞게 GREP 말해 foo
줄만을 제거해야 foo
하지 라인 foobar
또는 barfoo
.
-F
고정 문자열 일치 ( "정확한 일치") 용이지만 패턴이 전체 행과 일치하도록 강제 하지 않습니다 . POSIX-x
는 패턴이 전체 행과 일치하는 인스턴스로 일치를 제한 하도록 플래그 를 지정합니다 .
sed -r -i -e '/^(domain1|domain2|domain3|...|domainN)$/d' domainlist.txt
삭제할 도메인 목록이 파일에 있으면 다음을 수행하십시오.
sed -r -i -e '/^'"$(xargs <removelist.txt|sed -e 's/ /|/g)"')$/d' domainlist.txt
노트:
sed가 domainlist.txt를 백업하도록하려면 -i.bak를 사용하십시오.
removelist.txt가있는 경우 여러 항목의 수천, 그것은 최대 명령 줄 길이를 오버플로 할 수있다. 이것은 가능성이 높은 시나리오가 아니라 알아야 할 사항입니다.
더 자세히 살펴보면 다음과 같은 위험을 제거 할 수 있습니다.
for RE in $(xargs <removelist.txt|sed -e 's/ /|/g') ; \
do sed -r -i -e '/^('"$RE"')$/d' domainlist.txt ; \
done
/etc/localdomains
하고/etc/remotedomains
이와 같은 작업을 수행하기 전에 기억 하십시오.