それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

指定行削除するコマンド(sed

指定した行を削除したい。

ファイルを開くのすら面倒じゃないですか?

sed でファイルを編集

sed -i -e '10,10d' /path/to/file

10 行目を消す。

例えばこんな時

サーバーの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 をオフにしろと言われそうですが、それはしない。

該当行がわかってるので、ファイルを開いて探すのも面倒じゃないですか。

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 の祖先が同じだから、sedvim は 従兄弟?

ファイルを編集して上書きする -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...

参考資料

http://ja.wikipedia.org/wiki/Vi

http://d.hatena.ne.jp/eel3/20110625/1308934448

http://www.not-enough.org/abe/manual/command/vi.html