어떤 sed/awk 명령을 사용할 수 있나요? sort -u
모든 인스턴스를 삭제 합니다
입력하다:
abc
abc
def
abc
abc
def
예상 출력:
abc
def
abc
def
답변1
이것이 uniq
표준 명령의 목적입니다.
uniq your-file
일부 uniq
구현(예: GNU) uniq
에서는 일련의 줄 중 첫 번째 줄을 제공합니다.동일한 정렬( strcoll()
0을 반환) 대신바이트는 바이트와 동일합니다.(여기서 memcmp()
또는 strcmp()
0을 반환함). 구현 에 관계없이 바이트 간 비교를 강제하려면 uniq
다음 로케일을 강제로 적용할 수 있습니다 C
.
LC_ALL=C uniq your-file
답변2
Vim은 이 작업을 매우 잘 수행합니다.
:g/\v^(.*\n)\1/d
또는 vim을 명령줄 도구로 사용하려는 경우 다음을 수행할 수 있습니다.
vim file -c "g/\v^(.*\n)\1/d" -c "wq"
그렇게 하면 나중에 vim을 종료할 필요가 없습니다. ;)
설명하다:
:g/
이 정규식과 일치하는 모든 줄에서 ...
\v^(.*\n)\1
모든 줄은 그 자체로 이어집니다 ...
/d
뛰어다녔다디elete 명령(현재 줄 삭제) 변경 사항을 저장하고 종료 하면 됩니다 -c "wq"
.
답변3
이는 awk
동일합니다:
awk 'p!=$0; {p=$0}' file
p!=$0;
이전 줄과 다른 경우 ;
여기에 인쇄 줄이 필요합니다 . 현재 행으로 {p=$0}
설정합니다 .p
첫 번째 줄이 비어 있으면 첫 번째 줄이 누락되었다는 명백한 오류가 있습니다. 간단한 수정은 다음과 같습니다.
awk 'NR==1 || p!=$0; {p=$0}' file