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 에 추가 하 였 습 니 다.이것 은 삭제 하 는 역할 을 하지 않 았 기 때 문 입 니 다.아마도 가장 좋 은 방법 은 모든 경 로 를 알 고 추가 적 인 방식 이 아 닌 지정 을 표시 하 는 것 일 것 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Shell alias 명령에 별칭을 설정하는 방법명령에 별명을 설정하면 명령의'작은 이름'으로 삼을 수 있지만, 이렇게 하는 것이 무슨 의미가 있습니까? 이때 별명이 작용할 수 있다.vim 명령의 별명을vi라고 정의하면 이후에 실행된vi 명령은 실제로vim 명령을...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.