在 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 列开始直到行尾
就是这样。
彼得