LoginSignup
0
0

More than 3 years have passed since last update.

sedコマンド触ってみた

Posted at

はじめに

sed コマンドって見たことあるけど実際に自分で使ったことないな。。。
ファイルや標準出力を編集するコマンドのようだけど・・・

と思ってお勉強した次第です

基本

・引数で指定したファイルに対してスクリプトで指定した操作(挿入や置換など)を行い、その結果を標準出力に出力する
・リダイレクトすればファイルに出力することも可能
・引数の対象ファイルを省略した場合は、標準入力が処理対象になる

$ sed [-オプション] スクリプト [対象ファイル]

文字列の置換

・基本
※置換前文字列/置換後文字列がスペースを含む場合は""でくくらないと複数文字列とみなされて怒られるのでくくること

$ sed s/置換前文字列/置換後文字列/ ファイル

# sample.txtで一番最初のtestをTESTに置換する
例)$ sed s/test/TEST/ sample.txt

・すべてを置換したい
上記だと一番最初に見つかった置換対象だけを置換するので、対象をすべて置換したい場合はおしりにgをくっつける

$ sed s/置換前文字列/置換後文字列/g ファイル

# sample.txt内すべてのtestをTESTに置換する
例)$ sed s/test/TEST/g sample.txt

・指定した部分を置換したい
s(スクリプトコマンドというらしい)の前にgrepとかで使う正規表現(パターン)か行番号を指定する
パターンを使用する際は//で囲む

# 行番号を指定する場合
$ sed 行番号s/置換前文字列/置換後文字列/ 対象ファイル

# sample.txt4行目のtestをbigloooooveに置換
例)$ sed 4s/test/biglooooove/ sample.txt

# sample.txt2~5行目に含まれるniceをgoodに置換
例)$ sed 2,5s/nice/good/ sample.txt

# パターンを指定する場合
$ sed /パターン/s/置換前文字列/置換後文字列/ 対象ファイル

# sample.txtにhiを含む行にhelloがあったらhow are youに置換する
例)$ sed /hi/s/hello/"how are you"/ sample.txt

文字列(行)の追加、挿入

・基本
※追加は指定した行の後ろに追加される
※挿入は指定した行の前に挿入される
※ファイルの最終行は$で表す。(エスケープ必要)

$ sed 追加したい行a 追加したい文字列 対象ファイル
$ sed 挿入したい行i 挿入したい文字列 対象ファイル

# sample.txt3行目の後ろにgoodbyを追加する
例)$ sed 3agoodby sample.txt

# sample.txt3行目の前にgoodbyを挿入する
例)$ sed 3igoodby sample.txt

# 末尾にtheEndを追加する
例)$ sed \$atheEnd sample.txt

# 末尾1つ前にtheEndを挿入する
例)$ sed \$itheEnd sample.txt

・1か所に複数行を追加・挿入したい
\nで区切って追加・挿入する

$ sed 追加したい行a 追加したい文字列\n追加したい文字列 対象ファイル
$ sed 挿入したい行i 挿入したい文字列\n挿入したい文字列 対象ファイル

# sample.txt3行目の下にgoodbyとgoodmorningを追加する
例)$ sed 3agoodby\ngoodmorning sample.txt

# sample.txt3行目の前にgoodbyとgoodmorningを挿入する
例)$ sed 3igoodby\ngoodmorning sample.txt

・複数個所に追加・挿入したい
-eで複数書く

$ sed -e 追加したい行a追加したい文字列 -e 追加したい行a追加したい文字列 対象ファイル

$ sed -e 挿入したい行i挿入したい文字列 -e 挿入したい行i挿入したい文字列 対象ファイル

# sample.txt3行目の下にgoodby、5行目の下にgoodmorningを追加
例)$ sed -e 3agoodby -e 5agoodmorning sample.txt

# sample.txt3行目の前にgoodby、5行目の下にgoodmorningを挿入
例)$ sed -e 3igoodby -e 5igoodmorning sample.txt

文字列の削除

・基本

$ sed 削除したい行d

# sample.txt3行目を削除
例)$ sed 3d sample.txt

# sample.txt5~10行目を削除
例)$ sed 5,10d sample.txt

・パターンに合致する箇所を削除
正規表現が使える

$ sed /パターン/d

# sample.txtのniceを含む行を削除
$ sed /nice/d sample.txt

勉強してみて

一旦基本のここまでにしますが、もっと複雑なこともできるようですね。。。
難しい、、、精進します。。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0