Gnu 정렬을 사용하여 필드 구분 기호가 일부 행에만 있는 행을 정렬하는 방법

Gnu 정렬을 사용하여 필드 구분 기호가 일부 행에만 있는 행을 정렬하는 방법

내 .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/for 의 경우처럼 번들 이름 앞에 추가되지 않은 행을 정렬하려면 어떻게 해야 합니까 Bundle 'matchit.zip'?

답변1

언제든지 앞에 을 추가한 ./다음 다시 제거할 수 있습니다. 예를 들어:

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:"

또는 파일이 일관성이 있다고 확신하는 경우 단일 리터럴 공백을 사용하십시오.

관련 정보