次の例は、fstab で UUID 番号を一致させるときに行の先頭に文字列を追加する方法を示しています。
sed -e "/UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a/ s/^/###FAULTY_DISK###/" -i /etc/fstab
我々は確認することができます
more /etc/fstab
###FAULTY_DISK###UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a /data/sdc ext4 defaults,noatime 0 0
しかし、2回目の実行では、
sed -e "/UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a/ s/^/###FAULTY_DISK###/" -i /etc/fstab
more /etc/fstab
###FAULTY_DISK######FAULTY_DISK###UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a /data/sdc ext4 defaults,noatime 0 0
###FAULTY_DISK###
fstabファイルにすでに設定されている場合は、追加を無視するようにsedに指示する方法
答え1
そのUUIDで始まる場合にのみ追加します。
sed -e 's/^UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a/###FAULTY_DISK###&/' /etc/fstab
または、先行スペースも無視したい場合(存在する場合):
sed -e 's/^[[:blank:]]*UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a/###FAULTY_DISK###&/' /etc/fstab
答え2
もう一つの方法は、行をスキップすることです###FAULTY_DISK###
。 1行に無効なディスクの説明が含まれており、他の行にはそうでない次のサンプルファイルを考えてみましょう。
$ cat fstab
UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a /data/sdc ext4 defaults,noatime 0 0
###FAULTY_DISK###UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a /data/sdc ext4 defaults,noatime 0 0
n
in コマンドを使用して、sed
次の行に移動できます。したがって、sed
この行がエラーメッセージと一致する場合は、次の行に移動するように求められます。
$ sed "/###FAULTY_DISK###/n; s/UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a/###FAULTY_DISK###&/" fstab
###FAULTY_DISK###UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a /data/sdc ext4 defaults,noatime 0 0
###FAULTY_DISK###UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a /data/sdc ext4 defaults,noatime 0 0
ご覧のとおり、メッセージはメッセージのない行にのみ追加されます。
答え3
私が正しく理解した場合:
一方
##FAULTY_DISK###UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a
UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a
それから
$ sed '/^###FAULTY_DISK###UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a/!s/^UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a/###FAULTY_DISK###&/' /etc/fstab
###FAULTY_DISK###UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a
###FAULTY_DISK###UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a
答え4
使用幸せ(以前のPerl_6)
raku -pe 's/ ^ ("UUID=86d58af9-801b-4c25-b59d-80b52b4acc61") /\#\#\#FAULTY_DISK\#\#\#$0/;' fstab_test.txt
または
raku -pe 's[ ^ ("UUID=86d58af9-801b-4c25-b59d-80b52b4acc61") ] = "\#\#\#FAULTY_DISK\#\#\#$0";'
上記の答えは、Perlプログラミング言語スイートに属するRakuで書かれています。前に追加すると、同じ Raku 単一行の後続実行中に###FAULTY_DISK###
ファイルの 1 行がfstab
無視されます。つまり、修正は安定している。
サンプル入力とサンプル出力については、下記のリンクをご覧ください。