![Gnu 정렬을 사용하여 필드 구분 기호가 일부 행에만 있는 행을 정렬하는 방법](https://linux55.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%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%9D%BC%EB%B6%80%20%ED%96%89%EC%97%90%EB%A7%8C%20%EC%9E%88%EB%8A%94%20%ED%96%89%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/
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:"
또는 파일이 일관성이 있다고 확신하는 경우 단일 리터럴 공백을 사용하십시오.