クリップボードにコピーしました!
文字列のsed

sedの区切り文字を自由自在に変える方法|/以外の書き方と実践テクニック

updated: 2026/04/14 created: 2026/04/13

はじめに

sedはテキスト処理に欠かせないコマンドですが、「区切り文字」の理解でつまずく初学者は少なくありません。特にパスのように「/」が多い文字列では、エスケープが増えて読みにくくなる問題があります。

普段は「/」を使うことが多いですが、実は自由に変更できます。sコマンドの直後の1文字目が区切り文字として認識され、/ 以外に |, #, @, ; などがよく使われます

この記事では、区切り文字の仕組みと使い分けを初心者目線で丁寧に解説します。


参考元:GNU sed

sedと区切り文字で理解する置換コマンドの仕組み

今回使用するコマンドは以下です。

sed 's|/|_|g' input.txt

このコマンドの役割は「/ を _ にすべて置換する」です。

仕組み

要素内容
s置換コマンド
|区切り文字
/置換対象
_置換後
g行内すべて置換

sコマンドの直後の文字(改行やバックスラッシュ以外)なら、実質的にどの文字でも区切り文字として使えます

実行前の状態

ファイル名:input.txt

/etc/nginx/conf.d

実行後の状態

ファイル名:input.txt

_etc_nginx_conf.d

実行画像

|と/のコードの比較

区切り文字コード特徴
/sed 's/\//_/g' input.txt/をエスケープする必要あり
|sed 's|/|_|g' input.txt/をエスケープする必要無し

メリットとして、エスケープ(\)を減らすことで、正規表現のミスを物理的に防げる点が重要です

/以外の区切り文字を使う方法

区切り文字コード例特徴
#sed 's#/#_#g' input.txtURLに便利
@sed 's@/@_@g' input.txt視認性が高い
;sed 's;/;_;g' input.txtシンプル

変更しない方が良いケース

  • 一般的なサンプルコードと合わせたい場合
  • 他人と共有するスクリプト
  • 単純な置換でエスケープが少ない場合

このような場面では、標準的な「/」を使う方が理解しやすいです

区切り文字の逆引き

用途推奨区切り文字理由
ファイルパス|/と衝突しない
URL#http://と衝突しない
複雑な正規表現@視認性が良い

具体的な利用シーン

ファイル名:input.txt

/etc/nginx/conf.d

コマンド

sed 's|/|_|g' input.txt

解説

パス区切りの「/」を「_」に変換し、ログ用や変数用の安全な文字列に加工しています。区切り文字に「|」を使うことで、パスの「/」と衝突せず、エスケープ不要で処理できます。

区切り文字が含まれていたら

エラー例

sed 's|/|||g' input.txt

これは「置換後」が空かつ区切りが連続するため、意図しない解釈になりやすいです

改善例

sed 's|/|\||g' input.txt

この場合、「/」を「|」に置換します。バックスラッシュでエスケープすることで、区切り文字そのものを文字として扱えます

シェル変数の使用

sed "s|/|$TEST|g" input.txt

仕組み

  • ダブルクォートを使うことでシェル変数が展開されます
  • $TEST の値に置換される

例:

TEST=-

→ / が - に変換されます

失敗例

1つ目

sed 's|h/_/'

→ 区切りが不足して構文エラーになります

2つ目

sed 's|/|_|' input.txt

→ gがないため最初の1箇所しか置換されません

3つ目

sed 's//_/g' input.txt

→ 置換対象が未指定でエラーになります

まとめ

sedの区切り文字を理解すると、可読性と安全性が大きく向上します。特にパスやURLを扱う場面では、適切な区切り文字の選択が重要です

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

©︎ 2025-2026 running terminal commands