【Linux】テキストの変換や置換を行うコマンド:sed

Linux

どーも!marusukeです!

テキストの変換や置換を行うコマンドsedについて説明します!

sedコマンドでできること

基本の書式は以下です

  sed [オプション] {スクリプト} [入力ファイル]

sed (ストリームエディタ) はテキストストリームに対してパターンに基づいて編集作業を行うコマンドです

テキストファイルなどのテキストストリームの内容を読み込み、指定されたパターンに一致する部分を変更、削除、または追加したり、行に対して特定の処理を行うのに使われます

スクリプトは's/検索パターン/置換文字列/フラグ'のような一連のコマンドで構成され、指定したパターンに一致する文字や行に対して編集することができます

検索パターンに一致する文字を置換する時

sコマンドは、ファイル内のテキストを置換するのに一般的に使用されます

 sed -e 's/検索パターン/置換文字列/フラグ' [ファイル...]

検索パターンに一致するものを置換文字列に置換します、gフラグでテキスト内の一致する全ての部分を置換することができます。

sコマンドの使用例です。検索パターンであるappleに一致した最初の部分をorangeに変えています

echo "apple banana apple" | sed -e 's/apple/orange/'
orange banana apple

1文字ずつ別の文字に変換する時

sed -e 'y/...' は、文字を別の文字に変換するために使用されます

 sed -e 'y/元の文字列/置換文字列/' [ファイル...]

元の文字列1文字に対して、置換文字列の同じ場所の1文字が対応しています。したがって元の文字列置換文字列の文字数は同じである必要があります

この y コマンドの例では、文字列 “hello” の中の ‘l’, ‘e’, ‘o’ をそれぞれ ‘1’, ‘2’, ‘3’ に変換しています

 echo "hello" | sed -e 'y/leo/123/'
 h123l

行を削除するとき

sed -e '/検索パターン/d' [ファイル…]
または
sed -e '行数d' [ファイル…]

指定されたパターンに一致する行を削除するために使用されます

d コマンドは単体で使われるとすべての行を削除しますが、通常はパターンと組み合わせて特定の行だけを削除するために使用されます

# 全てのテキストを削除
echo "apple\nbanana\norange" | sed -e "d"
# 2行目のみを削除
echo "apple\nbanana\norange" | sed -e "2d"
apple
orange
# 検索パターンbananaに一致した行を削除
echo "apple\nbanana\norange" | sed -e "/banana/d"
apple
orange

# 部分一致した行を削除します(this is banana行も削除される)
echo "apple\norange\n this is banana" | sed -e "/banana/d" 
apple
orange

sedコマンドのオプション

オプション説明
-e script加工処理のスクリプトを指定します
-f ファイルスクリプトが書かれたファイルを指定します
-n自動での出力を抑制し、p コマンドで指定した行のみを出力します
-iファイルを直接編集し、元のファイルに変更を書き込みます
-r拡張正規表現を使用します

以上です!

ここまで読んでいただきありがとうございました!

コメント

タイトルとURLをコピーしました