次のサンプルファイルでは、単語を含む行を除いて、で始まるすべての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
したがって、例外の結果は次のようになります。
/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
これまでのところ、私たちは次のsedを持っています
sed -i '/^UUID/d' /etc/fstab
UUID
しかし、上記の方法はすべての行を削除します
ベストアンサー1
UUID=
最初のフィールドがで始まり、2番目のフィールドがそうでない行を削除したいようです/boot
。
したがって、awk
Perlのawkモードは確実な選択のように見えます。
awk '! ($1 ~ /^UUID=/ && $2 != "/boot")' /etc/fstab
(GNU awkは内部編集に使用できます-i /usr/share/awk/inplace.awk
)。
perl -lae 'print unless $F[0] =~ /^UUID=/ && $F[1] ne "/boot"' /etc/fstab
(内部編集perl
用)。-i
以下を使用して同じことを実行できますsed
。
sed '/^[[:space:]]*[^[:space:]]\{1,\}[[:space:]]\{1,\}/boot\([[:space:]].*\)\{0,1\}$/b
/^[[:space:]]*UUID=/d' /etc/fstab
一部は(most)または(Macosを含むFreeBSDとその派生)を使用してsed
その場所で編集できます。-i
-i ''
^使用しないでください-i inplace
現在の作業ディレクトリから最初に拡張機能をgawk
ロードしようとすると、誰かがそのディレクトリにマルウェアを植えた可能性があります。システムに付属の拡張プログラムのパスは異なる場合があります。出力を参照してください。inplace
inplace
inplace.awk
inplace
gawk
gawk 'BEGIN{print ENVIRON["AWKPATH"]}'