Linux:按挂载点字段对 /etc/fstab 进行排序

Linux:按挂载点字段对 /etc/fstab 进行排序

在 Linux 上,如何按挂载点对 /etc/fstab 文件进行排序?

我感兴趣的是按以下方式对 fstab 的一部分进行排序(在 /x 下安装的任何内容),即父项先于子项安装

$ grep "[[:space:]]/x" fstab
/dev/mapper/lv1         /x/a/b                  ext4    defaults        0 0
/dev/mapper/lv2         /x/c                    ext4    defaults        0 0
/dev/mapper/lv3         /x                      ext4    defaults        0 0
/dev/mapper/lv4         /x/a                    ext4    defaults        0 0

“明显”的做法却给了我相反的结果:

$ grep "[[:space:]]/x" fstab | sort fstab -k 2
/dev/mapper/lv1         /x/a/b                  ext4    defaults        0 0
/dev/mapper/lv4         /x/a                    ext4    defaults        0 0
/dev/mapper/lv2         /x/c                    ext4    defaults        0 0
/dev/mapper/lv3         /x                      ext4    defaults        0 0

在某些情况下会恢复其他作品,但在其他情况下则不会(不包括这里的,它可能违反保密协议):

$ grep "[[:space:]]/x" fstab | sort fstab -k 2 -r
/dev/mapper/lv3         /x                      ext4    defaults        0 0
/dev/mapper/lv2         /x/c                    ext4    defaults        0 0
/dev/mapper/lv4         /x/a                    ext4    defaults        0 0
/dev/mapper/lv1         /x/a/b                  ext4    defaults        0 0

我注意到它在除挂载点字段之外的所有其他字段中都有效。此外,我注意到,如果我删除挂载点之后的所有字段,它会按预期工作”

$ sort a -k 2
/dev/mapper/lv3         /x
/dev/mapper/lv4         /x/a
/dev/mapper/lv1         /x/a/b
/dev/mapper/lv2         /x/c

我怎样才能在不砍掉字段的情况下实现这个结果?

谢谢

答案1

尝试这个 :-)

$ grep "[[:space:]]/x" fstab | sort -k2,2
/dev/mapper/lv3         /x                      ext4    defaults        0 0
/dev/mapper/lv4         /x/a                    ext4    defaults        0 0
/dev/mapper/lv1         /x/a/b                  ext4    defaults        0 0
/dev/mapper/lv2         /x/c                    ext4    defaults        0 0
$ 

-k startfield,endfield - 否则 -k2 表示从第 2 列开始直到行尾

就是这样。

彼得

相关内容