Linux

【sed】入力からテキストの変換等を行い出力する|Linuxコマンド基礎

sed

今回は、Linuxコマンドで入力からテキストの変換等を行い出力する方法(sedコマンド)について分かりやすくご説明いたします。

 

うちぱぱ
うちぱぱ
それでは始めましょう!

入力からテキストの変換等を行い出力する【sed】

 

書式

sed [オプション] [コマンド] [ファイル名 …]

オプション

-n 出力しない
-e スクリプト スクリプトを入力されたコマンドセットに追加
-i[拡張子] ファイルを置き換える。拡張子を指定すればバックアップを作成
-f スクリプト 指定したファイルに書かれているスクリプトをコマンドセットに追加
-r 拡張正規表現を利用

コマンド

= 行番号を表示
a テキスト テキストを追加
i テキスト テキストを挿入
q sedを終了
r ファイル名 ファイルを追加
d パターンにあった部分を削除
s/正規表現/文字列/ 正規表現にマッチした部分を「文字列」で置き換える
/正規表現/ 正規表現にマッチした部分に移動

 

入力(標準入力もしくはパイプからの入力)からテキストの変換などを行い、標準出力に出力します。
viは入力されたデータがそのまま出力されることからビジュアルエディタと呼ばれます。sedは入力されたデータがコマンドを通って出力されるため、ストリームエディタと呼ばれています。
スクリプトで指定されたフィルタを通すこともできます。スクリプトで利用できるコマンドとして、d(削除)、a(追加)、(i 挿入)、c(変更)、(s 置換)などがあります。

コマンド実行例

ストリームエディタの使用例

$ cat /etc/passwd    ⇒パスワードファイルを確認
test:x:1001:1001::/home/test:/bin/sh
uchipapa:x:1002:1002::/home/uchipapa:/bin/sh
uchimama:x:1003:1003::/home/uchimama:/bin/sh
hanako:x:1004:100::/home/hanako:/bin/zsh
hikakin:x:1005:1005::/home/hikakin:/bin/bash

$ cat /etc/passwd | sed -e "/uchipapa/d"   ⇒正規表現でマッチする行を削除
test:x:1001:1001::/home/test:/bin/sh
uchimama:x:1003:1003::/home/uchimama:/bin/sh   ⇒uchipapaは削除されている
hanako:x:1004:100::/home/hanako:/bin/zsh
hikakin:x:1005:1005::/home/hikakin:/bin/bash

$ cat /etc/passwd | sed -e "/uchipapa/a" taro:x:1002:1002::/home/test:/bin/sh  ⇒追加する行
↑uchipapaにマッチする次の行に追加。aではなくiを指定するとマッチした行の前に追加される
test:x:1001:1001::/home/test:/bin/sh
uchipapa:x:1002:1002::/home/uchipapa:/bin/sh   ⇒マッチする行
taro:x:1002:1002::/home/test:/bin/sh        ⇒追加されている
uchimama:x:1003:1003::/home/uchimama:/bin/sh
hanako:x:1004:100::/home/hanako:/bin/zsh
hikakin:x:1005:1005::/home/hikakin:/bin/bash

$ cat /etc/passwd | sed -e "/uchipapa/c" taro:x:1002:1002::/home/test:/bin/sh  ⇒マッチした行を変更
test:x:1001:1001::/home/test:/bin/sh
taro:x:1002:1002::/home/test:/bin/sh
uchimama:x:1003:1003::/home/uchimama:/bin/sh
hanako:x:1004:100::/home/hanako:/bin/zsh
hikakin:x:1005:1005::/home/hikakin:/bin/bash

上記例を簡潔化して実行した例

$ cat /etc/passwd | sed -e "s/uchipapa/taro/g"
test:x:1001:1001::/home/test:/bin/sh
taro:x:1002:1002::/home/test:/bin/sh
uchimama:x:1003:1003::/home/uchimama:/bin/sh
hanako:x:1004:100::/home/hanako:/bin/zsh
hikakin:x:1005:1005::/home/hikakin:/bin/bash

スクリプトを書いたテキストファイルを読み込んで処理する

$ cat sed-script.txt   ⇒スクリプトを用意
s/fedora/fedora31/
s/utuntu/ubuntu TLS/

$ cat sed-text.txt   ⇒入力するファイルを用意
fedora
centos
redhat
ubuntu
debian

$sed -f sed-script.txt sed-text.txt   ⇒-fでスクリプトファイルを指定
fedora31    ⇒変換された
centos
redhat
ubuntu TLS   ⇒変換された
debian

コマンドを指定して文字列を追加する

↓上記sed-text.txtで、ubuntuの文字列のある部分に移動し、「Ubuntu TLS」を追加
$ sed -e "/ubuntu/ a Ubuntu TLS" sed-text.txt
fedora
centos
redhat
ubuntu
Ubuntu TLS   ⇒追加された
debian

 

sedは専門の書籍も出版されていますので、深く掘り下げて使用したい場合は、それらの書籍を参照することをオススメします。

≫ Amazonで書籍をさがす

 

 

うちぱぱ
うちぱぱ
今回は以上となります!