/ 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
.
답변
통신을 사용하십시오!
comm -23 /etc/remotedomains remove
매뉴얼 페이지에서 :
정렬 된 파일 FILE1과 FILE2를 한 줄씩 비교하십시오.
옵션이 없으면 3 열 출력을 생성합니다. 열 1에는 FILE1에 고유 한 행이 있고 열 2에는 FILE2에 고유 한 행이 있고 열 3에는 두 파일에 공통 인 행이 있습니다.
옵션 -1, -2 및 -3은 각 열을 비활성화합니다.
그러나 파일을 정렬해야합니다.
답변
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