긴 이야기 짧게주석을 무시하면서 fstab의 항목 열을 정렬해야 합니다.
/dev/foo /foo ext4 defaults 0 2
# comment line 1
/dev/bar /bar ext4 defaults 0 2
# comment line 2
UUID=1234567890 /baz ext4 defaults 0 2
되어야 한다
/dev/foo /foo ext4 defaults 0 2
# comment line 1
/dev/bar /bar ext4 defaults 0 2
# comment line 2
UUID=1234567890 /baz ext4 defaults 0 2
이상적으로는 다이빙 명령만 필요합니다.
</tldr>
내 문서 fstab
는 주석 줄로 된 문서의 큰 덩어리로 구성되어 있으며 필드 설명으로 끝나고 마지막으로 항목이 있습니다. 입력 섹션에는 주석 줄이 산재해 있습니다.
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# table entries begin ...
column -t
명령이나 이에 상응하는 명령을 사용하여 입력 행의 열을 정렬 하고 싶지만 주석을 무시하고 싶습니다. 주석 줄을 무시하지 않으면 정렬됩니다. vim에서 파일을 편집할 때 첫 번째 항목으로 시작하는 줄을 시각적으로 선택하고 실행할 수 있지만 '<,'>
!grep '^[^\#]' | column -t
grep은 주석 줄을 필터링하므로 출력에 표시되지 않으므로 vim의 선택 항목이 대체됩니다. column
작동하지 않기 때문에 일치하는 각 행에 대해 개별적으로 열 명령을 실행할 수 없습니다 .
이 작업을 수행할 수 있는 간단한 명령이 있습니까? 내부의 외부 명령에 간단히 위임할 수 있으므로 vim에서 구현할 필요가 없습니다.
답변1
tr -s \[:blank:] \ </etc/fstab | # squeeze all tabs/spaces to 1 space
sed 's/^#/ # # # # # #/' | # create 6 tiny comment fields
column -t | # get columns
sed '/^\( *#\)\{6\}/{s//#/;s/ */ /g;}' # fix and squeeze spaces for comments