![Gnu 정렬을 사용하여 일부 줄에만 필드 구분 기호가 있는 줄을 정렬하는 방법](https://rvso.com/image/52086/Gnu%20%EC%A0%95%EB%A0%AC%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%9D%BC%EB%B6%80%20%EC%A4%84%EC%97%90%EB%A7%8C%20%ED%95%84%EB%93%9C%20%EA%B5%AC%EB%B6%84%20%EA%B8%B0%ED%98%B8%EA%B0%80%20%EC%9E%88%EB%8A%94%20%EC%A4%84%EC%9D%84%20%EC%A0%95%EB%A0%AC%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
내 .vimrc에는 다음과 같이 vundle 번들을 나열합니다.
cat ~/.vimrc
...
Bundle 'Raimondi/delimitMate'
Bundle 'kien/ctrlp.vim'
Bundle 'matchit.zip'
Bundle 'upAndDown'
Bundle 'rking/ag.vim'
...
이제 번들 목록을 번들 이름별로 빠르게 정렬하고 싶습니다. 이는 /
다음과 같이 존재하는 라인에 대해 작동합니다.
cat ~/.vimrc | sort -t "/" -k2,2
...
Bundle 'matchit.zip'
Bundle 'upAndDown'
Bundle 'rking/ag.vim'
Bundle 'kien/ctrlp.vim'
Bundle 'Raimondi/delimitMate'
...
foo/
예를 들어 의 경우처럼 번들 이름 앞에 붙지 않는 줄을 정렬하려면 어떻게 해야 합니까 Bundle 'matchit.zip'
?
답변1
언제든지 앞에 a를 붙인 ./
다음 다시 제거할 수 있습니다. 예:
sed "/\// ! s:^Bundle[[:space:]][[:space:]]*':&./:" ~/.vimrc |
sort -t "/" -k2,2 |
sed "s:\(^Bundle[[:space:]][[:space:]]*\)'\./:\1:"
또는 GNU를 사용하면 sed
확장된 정규 표현식을 사용하여 이를 약간 단축할 수 있습니다.
sed -r "/\// ! s:^Bundle[[:space:]]+:&./:" ~/.vimrc |
sort -t "/" -k2,2 |
sed -r "s:(^Bundle[[:space:]]+)'\./:\1:"
또는 파일이 일관성이 있다고 확신하는 경우 단일 리터럴 공백을 사용하십시오.