🐕

vi できないときに、特定の行の内容を変更したい

2022/08/02に公開

特定の条件で vi など使えずに、困ったことに .conf 的なファイルが更新できなくなることがありますよね。あるんですよ。あったんです。

そんなときでも、sed があればある程度どうにかなるんだけれども、設定ファイルに限ってまったく同じような置換ルールが適用されて、大惨事を引き起こすこともある。しかし、行数を指定すれば、余計な被弾も減らせる。

しかし、その .conf が数百、数千行あったら...。

cat -n する

安心せよ、less や view でなくとも、行数を表示できる。cat -n だ。えらい。
こちらはとある某NASの設定ファイル。こんな感じで行数と共に表示できる。

	:
   487  [Versioning]
   488  Root = /share/CACHEDEV1_DATA/.versioning/
   489  Enable = FALSE
   490  QBox = FALSE
   491
   492  [QPKG Management]
   493  Have_Invalid_QPKG = FALSE
   494  Ignore_Cert = FALSE
   495
   496  [Push Notification]
   497  Level = 3
   498
   499  [TimeMachine]
   500  User Name = TimeMachine
   501  Storage Type = 1
   502  Capacity = 0
   503  Enabled = TRUE
	:

sed '行数s/置換前/置換後/' する

こうなったら、あとは行数を指定するだけ。今回は 503行目の Enabled = TRUEEnabled = FALSE にしたければ

sed '503s/TRUE/FALSE/'

だけ。この .conf ファイル。なんというクセの強さか、Enable で指定されるものが多すぎて、行数を指定するしかなかった。ので、結果、このような方法をとることになるという。

Discussion