如何从fstab中删除所有UUID但不删除启动文件系统的UUID

yae*_*ael 4 rhel text-processing fstab

在以下示例fstab文件中,我们要删除以 开头的所有行UUID,但包含单词UUID的行除外boot

/dev/mapper/VG100-lv_root /                       xfs     defaults        0 0
UUID=735cb76a-51b5-4e06-b6fb-3b9577e38dc5 /boot                   xfs     defaults        0 0
/dev/mapper/VG100-lv_var /var                    xfs     defaults        0 0


UUID=0b14011d-f69d-4c4c-8ce0-6240bb0a574a   /var/kafka/mp1                      xfs defaults,noatime 0 0
UUID=2d7872f2-96d4-4ba9-8a17-a1115542645c   /var/kafka/mp2                      xfs defaults,noatime 0 0
UUID=79bdbf56-9a09-4505-ab8e-41ce9432cf0f   /var/kafka/mp3                      xfs defaults,noatime 0 0
UUID=ca42a388-83d4-4f8b-aff7-3450d836eef7   /var/kafka/mp4                      xfs defaults,noatime 0 0
UUID=62d356bb-c393-4a74-bbf9-984b60d3b5c4   /var/kafka/mp5                      xfs defaults,noatime 0 0
UUID=d4071a83-204f-475f-8917-cdd77ef6b1ed   /var/kafka/mp6                      xfs defaults,noatime 0 0
Run Code Online (Sandbox Code Playgroud)

所以例外的结果应该如下

/dev/mapper/VG100-lv_root /                       xfs     defaults        0 0
UUID=735cb76a-51b5-4e06-b6fb-3b9577e38dc5 /boot                   xfs     defaults        0 0
/dev/mapper/VG100-lv_var /var                    xfs     defaults        0 0
Run Code Online (Sandbox Code Playgroud)

到目前为止我们有以下 sed

 sed -i '/^UUID/d'  /etc/fstab
Run Code Online (Sandbox Code Playgroud)

但上述方法会删除所有UUID

Sté*_*las 6

在我看来,您想删除第一个字段以 开头UUID=而第二个字段不是 的行/boot

\n

所以awkor perl 的 awk 模式似乎是一个明显的选择:

\n
awk '! ($1 ~ /^UUID=/ && $2 != "/boot")' /etc/fstab\n
Run Code Online (Sandbox Code Playgroud)\n

(GNU awk 可以使用 \xc2\xb9 就地编辑-i /usr/share/awk/inplace.awk)。

\n
perl -lae 'print unless $F[0] =~ /^UUID=/ && $F[1] ne "/boot"' /etc/fstab\n
Run Code Online (Sandbox Code Playgroud)\n

perl用于-i就地编辑)。

\n

等效的操作可以完成sed

\n
sed '/^[[:space:]]*[^[:space:]]\\{1,\\}[[:space:]]\\{1,\\}/boot\\([[:space:]].*\\)\\{0,1\\}$/b\n     /^[[:space:]]*UUID=/d' /etc/fstab\n
Run Code Online (Sandbox Code Playgroud)\n

有些可以使用(大多数)或(FreeBSD 及其衍生产品,包括 Macos)sed进行就地编辑。-i-i ''

\n
\n

\xc2\xb9不要使用-i inplaceas尝试首先从当前工作目录gawk加载inplace扩展名(asinplace或),否则有人可能会在其中植入恶意软件。随系统提供的扩展inplace.awk的路径可能会有所不同,请参阅输出inplacegawkgawk 'BEGIN{print ENVIRON["AWKPATH"]}'

\n