[解決済み] sed の置換パターンに対応した文字列をエスケープする
2022-03-14 08:15:20
質問
私のbashスクリプトで、私はsedパターンで使用する必要がある外部(ユーザーから受信した)文字列を持っています。
REPLACE="<funny characters here>"
sed "s/KEYWORD/$REPLACE/g"
をエスケープするにはどうすればよいですか?
$REPLACE
の文字列が安全に受け入れられるように
sed
をリテラルに置き換えるのですか?
NOTE
は
KEYWORD
は、マッチング等のないダムな部分文字列です。ユーザーから提供されたものではありません。
解決方法は?
警告 : これは ではない は改行を考慮します。より詳細な回答は このSO-question の代わりに (ありがとうございます。 エド・モートン & Niklas Peter)
なお、すべてをエスケープするのは良くない考えです。Sed は多くの文字をエスケープして 得る の特殊な意味を持つ。例えば、置換文字列の中の数字をエスケープすると、後方参照に変わります。
Ben Blankが言ったように、置換文字列でエスケープする必要があるのは3文字だけです(エスケープそのもの、文末のフォワードスラッシュ、すべてを置換する&)。
ESCAPED_REPLACE=$(printf '%s\n' "$REPLACE" | sed -e 's/[\/&]/\\&/g')
# Now you can use ESCAPED_REPLACE in the original sed statement
sed "s/KEYWORD/$ESCAPED_REPLACE/g"
をエスケープする必要がある場合は
KEYWORD
という文字列が必要です。
sed -e 's/[]\/$*.^[]/\\&/g'
で使用することができる。
KEYWORD="The Keyword You Need";
ESCAPED_KEYWORD=$(printf '%s\n' "$KEYWORD" | sed -e 's/[]\/$*.^[]/\\&/g');
# Now you can use it inside the original sed statement to replace text
sed "s/$ESCAPED_KEYWORD/$ESCAPED_REPLACE/g"
以外の文字を使用した場合は
/
を区切り文字として使用する場合は、上記の式のスラッシュを、使用する文字に置き換える必要があります。PeterJCLawのコメントで解説しています。
編集しました。 以前は考慮されていなかったいくつかのコーナーケースのために、上記のコマンドは何度か変更されています。詳しくは編集履歴をご覧ください。
関連
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] なぜパスワードにはStringではなくchar[]が好まれるのですか?
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] バイトを文字列に変換する
-
[解決済み] sedで改行をスペースに置き換えるには?
-
[解決済み] Goで複数行の文字列はどのように書くのですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】大文字・小文字を区別しない「Contains(string)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Bashで、文字列がある値で始まっているかどうかを確認するにはどうすればよいですか?
-
[解決済み] Rust の `String` と `str` の違いは何ですか?
-
[解決済み] grepを使ってフォルダ内の単語を検索するにはどうすればよいですか?
-
[解決済み] sed の置換パターンに対応した文字列をエスケープする
-
[解決済み】Dartで文字列を数値にパースする方法は?
-
[解決済み] Python: None を空の文字列に変換する最も慣用的な方法?
-
[解決済み] Base64の長さ計算?
-
[解決済み] 変数名が文字列で保存されている場合、変数値を取得する方法は?
-
[解決済み] VB.NETでのマルチライン文字列
-
[解決済み] パスからディレクトリを抽出する [重複]。