ここには、シェルとsedの2つのレベルの解釈があります。
シェルでは、単一引用符自体を除き、単一引用符の間のすべてが文字どおりに解釈されます。単一引用符の間に単一引用符を効果的に書くには、単一引用符を'\''
閉じます(単一引用符を1つ、リテラル単一引用符を1つ、単一引用符を1つ開きます)。
Sedは基本的な正規表現を使用します。BREでは、文字を文字どおりに処理するために$.*[\^
、文字セット([…]
)内を除き、文字の前にバックスラッシュを付けて引用符で囲む必要があります。文字、数字、および(){}+?|
引用符を使用しないでください(実装によっては、これらの一部を引用符で囲むことで回避できます)。シーケンスは\(
、\)
、\n
、およびいくつかの実装では\{
、\}
、\+
、\?
、\|
およびその他のバックスラッシュ+英数字は特別な意味を持っています。$^
一部の実装では、一部の位置で引用符を付けないで済ませることができます。
さらに、/
ブラケット式の外側の正規表現で使用する場合は、前にバックスラッシュが必要です。s~/dir~/replacement~
またはを書くことで、区切り文字として代替文字を選択できます\~/dir~p
。BREに区切り文字を含める場合は、区切り文字の前にバックスラッシュが必要です。BREで特別な意味を持つ文字を選択し、それを文字どおりに含める場合は、3つのバックスラッシュが必要です。一部の実装では動作が異なる場合があるため、これはお勧めしません。
一言で言えば、ためにsed 's/…/…/'
:
- 単一引用符の間に正規表現を記述します。
'\''
正規表現で単一引用符で終わるために使用します。
$.*/[\]^
これらの文字の前にバックスラッシュを置きます(ただし、ブラケット式の中には入れません)。(技術的には、あなたは前にバックスラッシュを置くべきではありません]
が、私は扱う実装を知らない]
と\]
ブラケット式の外側では異なります。)
- ブラケット式の中では、
-
文字通り処理されるために、それが最初または最後であることを確認します([abc-]
または[-abc]
、ではなく[a-bc]
)。
- ブラケット式の中では、
^
文字通り処理されるために、それが最初ではないことを確認してください([abc^]
ではなくを使用してください[^abc]
)。
]
ブラケット式と一致する文字のリストに含めるには、最初の文字(または^
否定セットの場合は最初の文字):[]abc]
または[^]abc]
(not [abc]]
nor[abc\]]
)にします。
置換テキスト:
&
そして、\
区切り文字(通常はそうであるように、バックスラッシュの後に指定して引用符で囲む必要/
)や改行を。
\
数字が続く特別な意味があります。\
手紙によっていくつかの実装で特別な意味(特殊文字)が続き、\
他のいくつかの文字は意味が続く\c
か、c
実装に依存します。
- 引数(
sed 's/…/…/'
)を単一引用符で囲ん'\''
で、置換テキストに単一引用符を付けるために使用します。
正規表現または置換テキストがシェル変数に由来する場合、それを覚えておいてください
- 正規表現はリテラル文字列ではなく、BREです。
- 正規表現では、改行を次のように表現する必要があります
\n
(sed
パターン文字列に改行文字を追加する他のコードがない限り、これは一致しません)。ただし、一部のsed
実装ではブラケット式内では機能しないことに注意してください。
- 置換テキストで
&
は\
、、および改行を引用符で囲む必要があります。
- 区切り文字は引用符で囲む必要があります(ただし、括弧式の中ではありません)。
- 補間には二重引用符を使用します
sed -e "s/$BRE/$REPL/"
。
function sedPath { path=$((echo $1|sed -r 's/([\$\.\*\/\[\\^])/\\\1/g'|sed 's/[]]/\[]]/g')>&1) } #Escape path for use with sed