指定した行を削除したい。
ファイルを開くのすら面倒じゃないですか?
sed でファイルを編集
sed -i -e '10,10d' /path/to/file
10 行目を消す。
sed で簡単にファイルを編集
sed -i -e '15d' /Users/takuya/.ssh/known_hosts
sed は stream edior の ed 拡張版です。ed コマンドは、Vim使ってる人ならだれでも知ってるアレです。つまり、sed のコマンドは vim のコマンドです。わかりやすい!っていうか、vi コマンド モードが edの拡張版で、 vim が vi の拡張版で、ed のパイプライン対応が sed だからなんですが。つまり、ed の祖先が同じだから、sed と vim は 従兄弟?
ファイルを編集して上書きする -i オプション
sed -i ... ファイル
この-i を使うと、ファイルを編集して上書きする。
コマンドを指定する。 -e
sed のコマンドを -e で指定する。
sed -e '1,$d' /etc/hosts
2行目から末行まで全部消す。
1行目だけを残す。
sed -e '2,$d' /etc/hosts
簡単な使い方。
sedに深入りすると大変なので、、、ドール沼より、怖いvi /sed 沼だと思うので、深入りせずに、ちょっとだけ。
vim と違ってるのは行省略かな。sedは行番号の省略時の動作が異なる。vim が行を指定しない時にカレント行になるのたいし、sedでは標準入力で入ってきた各行に順番に適用される。ってことが違いかな。
1行目を消す
sed -e '1d' /etc/hosts
最終行を消す
sed -e '$d' /etc/hosts
7-9行目を消す
sed -e '7,9d' /etc/hosts
行番号をつける
sed -e '=' /etc/hosts
置換する
sed -e 's/foo/bar/g' /etc/hosts
複数ファイルをまとめて扱う
sed -e 's/foo/bar/g' File0 File1 File2...
例えばこんな時:
ssh でのauthorized_keys を書き換えるとき。
サーバーのIPアドレスが違うときにHostKeyチェックで落ちる。SSHで port forwarding やトンネル作ってる時によく起きる。面倒じゃないですか?
takuya@rena:~/Desktop$ ssh root@192.168.2xx.3xx reboot @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the RSA key sent by the remote host is 95:56:53:34:10:88:cf:xx:xx:xx:xx:xx:xx:xx:xx:xx. Please contact your system administrator. Add correct host key in /Users/takuya/.ssh/known_hosts to get rid of this message. Offending RSA key in /Users/takuya/.ssh/known_hosts:15 # <------------ここ消せばいい RSA host key for 192.168.2xx.3xx has changed and you have requested strict checking. Host key verification failed.
Strict host Key Check をオフにしろと言われそうですが、それはしない。
該当行がわかってるので、ファイルを開いて探すのも面倒じゃないですか。
2018/07/16
記述を修正
参考資料
http://ja.wikipedia.org/wiki/Vi