長い話を短くコメントを無視しながら、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