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

sedでエスケープが必要な記号まとめ|初心者がつまずくポイントを徹底解説

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

はじめに

sedはテキスト処理を効率化できる強力なコマンドですが、「エスケープ」が原因で思った通りに動かないことが非常に多いです。特に記号の扱いは初学者が最初につまずくポイントです。

この記事では、実際に記号を検証しながら、sedにおけるエスケープの考え方を理解できるように解説します。単なる暗記ではなく、「なぜ必要なのか」まで理解することで応用力が身につきます。

参考: GNU sed

sedとエスケープを理解する置換コマンドの仕組み

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

sed 's/\//hello/' input.txt

このコマンドの動きを分解すると以下の通りです。

要素内容
s置換コマンド(substitute)
/区切り文字
\/「/」で検索(エスケープしている)
hello置換後の文字列

sedでは「/」が区切り文字として使われるため、そのままでは検索対象として扱えません。そのため\でエスケープしています。

実行前の状態

まずはファイルを作成します。

cat << 'EOF' > input.txt
.,*[]()!"#$%-=~^|@`{;+:*}<>?_&\/'
EOF

input.txtの内容は以下です。

.,*[]()!"#$%-=~^|@`{;+:*}<>?_&\/'

実行後の状態

コマンドを実行します。

sed 's/\//hello/' input.txt

input.txtの内容(出力結果)は以下になります。

.,*[]()!"#$%-=~^|@`{;+:*}<>?_&\hello'

「/」が「hello」に置換されていることが確認できます。

実行画像

検索パターンでエスケープが必要な記号

sedの検索パターンでは、正規表現として特別な意味を持つ記号があります。そのため、文字として扱うにはエスケープが必要です。

記号コマンド例意味
.sed 's/\./X/'任意の1文字
*sed 's/\*/X/'直前の繰り返し
$sed 's/\$/X/'行末
^sed 's/\^/X/'行頭
[sed 's/\[/X/'文字クラス開始
]sed 's/\]/X/'文字クラス終了
\sed 's/\\/X/'エスケープ文字
/sed 's/\//X/'区切り文字

これらは「特別な意味を持つ」ため、そのまま使うと意図しない動作になります。

'(シングルクオート)で囲む理由

以下のコマンドを見てください。

sed 's/hello/$test/'

シングルクオートで囲むことで、$testは「そのまま文字列」として扱われます。

一方、ダブルクオートの場合:

sed "s/hello/$test/"

これはシェルによって$testが変数展開されます。つまり、意図せず値が変わる可能性があります。

そのため、sedでは基本的にシングルクオートを使うのが安全です。

'(シングルクオート)を指定したい場合

シングルクオート自体を扱うには、以下のように書きます。

sed 's/'\''/hello/' input.txt

これは以下のように分解できます。

  • ' → 文字列終了
  • \' → エスケープされたシングルクオート
  • ' → 再び文字列開始

このように「一度閉じてからエスケープする」のがポイントです。

BREとEREの違い

sedはデフォルトでBRE(基本正規表現)を使用します。

記号BREERE
()エスケープ必要 \(\)そのまま使用
{}エスケープ必要 \{\}そのまま使用
+エスケープ必要 \+そのまま使用
?エスケープ必要 \?そのまま使用

EREを使う場合は-Eオプションを付けます。

挙動比較コード:

echo "(a)" | sed 's/(a)/X/'
echo "(a)" | sed -E 's/(a)/X/'

置換後でエスケープが必要な記号

まずファイルを作成します。

cat << 'EOF' > input.txt
X
EOF

置換後では以下の記号に注意が必要です。

記号コマンド例
&sed 's/X/\&/'
\sed 's/X/\\/'
/sed 's/X/\//'

使用例

sed 's/X/\&/' input.txt

→ 「&」は「マッチした文字列」を意味するため、エスケープが必要です。

区切り文字の変更

sedでは「/」以外も区切り文字に使えます。

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

パスなど「/」が多い場合は、区切り文字を変更する方が可読性が上がります。実務でも推奨されるケースが多いです。

詳しくはこちらのsedの区切り文字を自由自在に変える方法|/以外の書き方と実践テクニックで解説していますので、ぜひそちらも確認してください。

逆引き

よくある操作をコマンドから逆引きで紹介します。

例1:/を置換

cat << 'EOF' > input.txt
a/b/c
EOF
sed 's/\//-/g' input.txt

例2:行末の$を置換

cat << 'EOF' > input.txt
test$
EOF
sed 's/\$/END/' input.txt

例3:ドットを置換

cat << 'EOF' > input.txt
a.b.c
EOF
sed 's/\./-/g' input.txt

失敗例

1:エスケープ忘れ

sed 's/./X/'

→ 全文字が対象になる

2:ダブルクオート使用

sed "s/hello/$test/"

→ 変数展開される

3:区切り文字の衝突

sed 's//home/user//tmp/'

→ エラーになる

sedとエスケープを理解して安全に使いこなすためのまとめ

sedで重要なのは「どの記号が特別な意味を持つか」を理解することです。エスケープは単なる記号のルールではなく、「正規表現の文法」を正しく扱うための手段です。

特に以下を押さえておくと実務でも困りません。

  • 検索パターンでは正規表現の記号に注意
  • 置換後では「&」と「\」に注意
  • シングルクオートで囲むのが基本
  • 区切り文字は柔軟に変更可能

これらを理解すれば、sedとエスケープの扱いに自信が持てるようになります。

コメントを残す

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

©︎ 2025-2026 running terminal commands