Shell 은 텍스트 를 다시 고 치 며 원래 의 순 서 를 조작 합 니 다.

3040 단어 Shell텍스트 삭제
쉽게 말 하면 이 기 교 는 다음 과 같은 장면 에 대응 된다.
다음 과 같은 텍스트 가 있다 고 가정 합 니 다.

cccc
aaaa
bbbb
dddd
bbbb
cccc
aaaa
지금 은 그것 을 다시 처리 해 야 합 니 다.이것 은 아주 간단 합 니 다.sort-u 는 해결 할 수 있 습 니 다.그러나 만약 에 제 가 텍스트 의 원래 순 서 를 유지 하고 싶다 면 예 를 들 어 여기에 두 개의 aaaa 가 있 습 니 다.저 는 두 번 째 aaaa 를 없 애고 싶 을 뿐 입 니 다.첫 번 째 aaaa 는 bbbb 앞 에 있 습 니 다.다시 한 후에 도 그 앞 에 있어 야 합 니 다.그래서 제 가 기대 하 는 출력 결 과 는?

cccc
aaaa
bbbb
dddd
물론 이 문제 자 체 는 어렵 지 않 습 니 다.C++또는 python 으로 쓰 는 것 도 쉽 지만,살기 라 는 것 은 소 칼 을 사용 하 는 것 입 니 다.셸 명령 으로 해결 할 수 있 을 때,그것 은 영원히 우리 의 최 우선 선택 입 니 다.답 은 마지막 에 드 리 겠 습 니 다.제 가 어떻게 생각 했 는 지 말씀 드 리 겠 습 니 다.
우 리 는 때때로 자신의 디 렉 터 리 를 환경 변수 PATH 에 추가 하려 고 할 때~/.bashrc 파일 에 이렇게 씁 니 다.예 를 들 어 가입 할 디 렉 터 리 는$HOME/bin 입 니 다.

export PATH=$HOME/bin:$PATH
이렇게 해서 우 리 는 PATH 에 경 로 를 추가 한 것 과 같 습 니 다.$HOME/bin 디 렉 터 리 는 맨 앞에서 검색 되 지만 source~/.bashrc 를 실행 하면$HOME/bin 디 렉 터 리 는 PATH 에 추 가 됩 니 다.다음 에 디 렉 터 리 를 추가 하면 예 를 들 어

export PATH=$HOME/local/bin:$HOME/bin:$PATH
source~/.bashrc 를 실행 할 때$HOME/bin 디 렉 터 리 는 PATH 에 두 개의 기록 이 있 습 니 다.이것 은 사용 에 영향 을 주지 않 지만 강박 증 에 있어 서 는 참 을 수 없습니다.그래서 문 제 는$PATH 에서 중복 되 는 경 로 를 제거 하고 원래 의 경로 순서 가 변 하지 않 습 니 다.즉,원래 누가 앞 에 있 었 는 지,무 거 운 후에 도 여전히 앞 에 있 었 습 니 다.셸 명령 을 실행 할 때 첫 번 째 경로 부터 찾 기 때문에 순서 가 중요 합 니 다.
자,이렇게 많은 말 을 했 습 니 다.우 리 는 최종 결 과 를 밝 히 겠 습 니 다.글 에서 시 작 된 데 이 터 를 예 로 들 어 입력 파일 이 in.txt 라 고 가정 하고 명령 은 다음 과 같 습 니 다.

cat -n in.txt | sort -k2,2 -k1,1n | uniq -f1 | sort -k1,1n | cut -f2-
이것들 은 모두 매우 간단 한 셸 명령 입 니 다.다음은 잠시 설명 하 겠 습 니 다.

cat -n in.txt : , , \t
sort -k2,2 -k1,1n : ,primary key ,second key
uniq -f1 : , ,
sort -k1,1n : ,key
cut -f2- : 2 , \t
첫 번 째 명령 부터 차례대로 조합 하여 실제 출력 효 과 를 보면 더욱 쉽게 이해 할 수 있다.$PATH 의 중복 경 로 는 어떻게 처리 해 야 합 니까?아니면 앞의 예 로 전후 에 tr 로 전환 하면 됩 니 다.

export PATH=$HOME/local/bin:$HOME/bin:$PATH
export PATH=`echo $PATH | tr ':' '
' | cat -n | sort -k2,2 -k1,1n | uniq -f1 | sort -k1,1n | cut -f2- | tr '
' ':'`
사실 이렇게 PATH 를 사용 하면 문제 가 있 습 니 다.예 를 들 어 우리 가 상기 명령 을 실행 한 후에$HOME/bin 이라는 경 로 를 없 애 려 면 다음 과 같은 내용 으로 만 수정 하 는 것 이 부족 합 니 다.

export PATH=$HOME/local/bin:$PATH
export PATH=`echo $PATH | tr ':' '
' | cat -n | sort -k2,2 -k1,1n | uniq -f1 | sort -k1,1n | cut -f2- | tr '
' ':'`
$HOME/bin 을$PATH 에 추가 하 였 습 니 다.이것 은 삭제 하 는 역할 을 하지 않 았 기 때 문 입 니 다.아마도 가장 좋 은 방법 은 모든 경 로 를 알 고 추가 적 인 방식 이 아 닌 지정 을 표시 하 는 것 일 것 입 니 다.

좋은 웹페이지 즐겨찾기