여러 줄로 된 텍스트 문자열이있는 텍스트 파일이 있는데, 파일을 스캔하고 여러 줄로되어 있고 잠재적으로 중복되는 문자열에서 발견되는 모든 인스턴스를 제거하고 싶습니다.
예제 문자열 :
recursive-test yes;
test-limit{
tests 10;
};
location "testLoc" {
type test;
};
location "testLoc2"{
type test;
file "/etc/var/test.sql";
};
include "/etc/var/test.conf";
};
recursive-test yes;
test-limit{
tests 10;
};
location "testLoc" {
type test;
};
location "testLoc2"{
type test;
file "/etc/var/test.sql";
};
include "/etc/var/test.conf";
};
otherTestTextHere
123
321
recursive-test yes;
test-limit{
tests 10;
};
location "testLoc" {
type test;
};
location "testLoc2"{
type test;
file "/etc/var/test.sql";
};
include "/etc/var/test.conf";
};
보시다시피 텍스트 파일의 반복되는 텍스트 문자열은 문자열의 시작부터 여러 줄의 끝까지 항상 동일합니다. 항상 동일합니다.
recursive-test yes;
test-limit{
tests 10;
};
location "testLoc" {
type test;
};
location "testLoc2"{
type test;
file "/etc/var/test.sql";
};
include "/etc/var/test.conf";
};
여러 줄로 된 문자열은 정상적으로 복제되어서는 안되지만 안전 장치로서 모든 인스턴스를 스캔하고 어떤 이유로 텍스트 파일에 쓰는 다른 응용 프로그램에서 문자열이 복제되는 경우 완전히 제거하는 방법을 찾고 있습니다 .
sed
I를 사용하면 한 번에 한 줄만 삭제하는 방법 만 알아낼 수 있지만 여러 줄로 된 문자열의 일부 줄에있는 일부 단어가 비슷한 다른 여러 줄로 된 문자열에 표시되기 때문에 작동하지 않습니다. 유지. 나는 실제로 문자열의 시작부터 끝까지이 여러 줄로 된 문자열의 '정확한'복제를 검색하려고합니다.
한 줄 명령 줄 / 최적화로 유지하려고합니다.
OP를 이해하는 방법에는 빈 줄로 구분 된 텍스트 블록이 있으며 OP는 모든 중복 항목을 제거하려고합니다.
awk -v RS='\n\n' -v ORS="\n\n" '!seen[$0]++' file
OP가 블록을 제거하고 싶다면 GNU sed를 통해 시도하십시오.
sed -z 's~recursive-test yes;\ntest-limit{\ntests 10;\n};\nlocation "testLoc" {\ntype test;\n};\nlocation "testLoc2"{\ntype test;\nfile "/etc/var/test.sql";\n};\ninclude "/etc/var/test.conf";\n};~~g' file
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다