grepとsedを使った特定行の値の置換方法

grepで特定の行を指定して、その行の値を置換する

Linuxで特定のID等をgrepで検索し、その結果の値を置換したい場合、は、grep sed コマンドを使用することで簡単に実現できます。

例として、下記のようなファイルがあるとします。
このファイルに対し、特定のID(例えば test4)を検索し、その行に含まれる 23445903 を 99999999 に置換する方法を説明します。

$ cat data.txt
test1  23458902 4134584 100
test2  23453906 4234584 300
test3  23434905 4135684 400
test4  23445903 4134574 500
test5  23458452 4134260 600

grepで検索

まず、対象の行を grep で検索すると以下の結果になります

$ grep "test4" data.txt
# 出力結果
test4  23445903 4134574 500

sedを使った置換

sed コマンドを使用し、該当の行に含まれる 2344590399999999 に置き換えます。

$ sed -i '/test4/s/23445903/99999999/' data.txt

コマンドの詳細

  • /test4/ → test4 を含む行を検索
  • s/23445903/99999999/ → その行の 23445903 を 99999999 に置換
  • -i → ファイルを直接編集(-i.bak を使うと data.txt.bak というバックアップを作成)

変更内容を確認

$ cat data.txt
test1  23458902 4134584 100
test2  23453906 4234584 300
test3  23434905 4135684 400
test4  99999999 4134574 500
test5  23458452 4134260 600

変更を確認するだけでファイルを編集しない方法

置換結果を確認するだけで、ファイルを直接編集しない場合は、以下のように sed を使います。

$ sed '/test4/s/23445903/99999999/' data.txt

 

スポンサーリンク

0
0