소스 파일에서 텍스트 검색 및 삭제

소스 파일에서 텍스트 검색 및 삭제

여러 파일에서 블록 텍스트를 검색하고 제거하고 싶습니다.

일치시킬 텍스트 블록이 파일에 있습니다. 디렉토리를 구문 분석하고 /home/user/myblock.txt디렉토리의 모든 파일에서 /home/user/rep콘텐츠를 제거하고 싶다고 가정해 보겠습니다.mybloc.txt

답변1

삭제할 텍스트 블록이 여러 줄에 걸쳐 있고 각 개별 파일이 RAM에 맞는 경우 가장 쉬운 방법은 각 파일을 RAM에 완전히 로드하고 전역 문자열 교체를 수행하는 것입니다. Perl을 사용하면 레코드 구분 기호를 설정하지 않고 -i -p레코드별로 파일 레코드를 수정하여 이를 쉽게 수행할 수 있습니다 -0777(기본 레코드 구분 기호는 개행입니다).

perl -0777 -i -pe '
    BEGIN {
        open BLOCK, "<", "/home/user/myblock.txt";
        $block = <BLOCK>;
        die unless length($block);
        close BLOCK;
    }
    s/\Q$block//g
' /home/user/rep/*

답변2

다음을 시도해 볼 수 있습니다.

    var=`cat /home/user/myblock.txt`;
    sed -e s/"$var"//g /home/user/rep/somefile;

물론 이렇게 하면 텍스트 블록 없이 일부 파일만 인쇄되지만 출력 리디렉션을 사용하면 쉽게 저장할 수 있습니다.

파일을 "제자리에서" 편집하려면 -ised의 인수를 사용하되 주의하세요. 모든 데이터가 손실될 수 있습니다. 임시 파일에 저장하고 이름을 바꾸는 것이 좋습니다.

myblock.txt에 여러 줄이 있으면 이 방법이 작동하지 않습니다.

관련 정보