回答:
最初に出現するパターンを特定の文字列に置き換えるには、次のコマンドを使用します。${parameter/pattern/string}
#!/bin/bash
firstString="I love Suzi and Marry"
secondString="Sara"
echo "${firstString/Suzi/$secondString}"    
# prints 'I love Sara and Marry'
すべての出現箇所を置き換えるには、次を使用します。${parameter//pattern/string}
message='The secret code is 12345'
echo "${message//[0-9]/X}"           
# prints 'The secret code is XXXXX'
(これは、に記載されてバッシュリファレンスマニュアル、§3.5.3「シェルパラメータ展開」。)
この機能はPOSIXでは指定されていないことに注意してください。これはBash拡張機能であるため、すべてのUnixシェルがこの機能を実装しているわけではありません。関連するPOSIXドキュメントについては、The Open Group Technical Standard Base Specifications、Issue 7、Shell&Utilitiesボリューム、§2.6.2 "Parameter Expansion"を参照してください。
\nそのコンテキストでは、改行ではなく、それ自体を表すためです。現在、Bashをテストするのに便利ではありませんが、のようなものを書くことができるはず$STRING="${STRING/$'\n'/<br />}"です。(たぶんあなたは望むSTRING//-代わりに全部を置き換える- STRING/)
                    echo ${my string foo/foo/bar}。必要なものinput="my string foo"; echo ${input/foo/bar}
                    //直接言及するのではなく、「パターンが ' /'で始まる場合」に言及します(これは正確ではありません。その文の残りの/部分では、エクストラは実際にはパターン)-しかし、私はもっと良い情報源を知りません。
                    これは、bash文字列操作で完全に実行できます。
first="I love Suzy and Mary"
second="Sara"
first=${first/Suzy/$second}
これにより、最初の出現のみが置き換えられます。それらをすべて置き換えるには、最初のスラッシュを2倍にします。
first="Suzy, Suzy, Suzy"
second="Sara"
first=${first//Suzy/$second}
# first is now "Sara, Sara, Sara"Dashの場合、以前の投稿はすべて機能しません
POSIX sh互換ソリューションは次のとおりです。
result=$(echo "$firstString" | sed "s/Suzi/$secondString/")result=$(echo $firstString | sed "s/Suzi/$secondString/g")
                    echo引数の周りに欠落している引用符も追加しました。それは単純な文字列で引用することなく一見機能しますが、重要な入力文字列(不規則な間隔、シェルのメタ文字など)で簡単に壊れます。
                    これを試して:
 sed "s/Suzi/$secondString/g" <<<"$firstString"sed文字列にRegExp文字が含まれている場合よりもbashを使用する方が適切です。
echo ${first_string/Suzi/$second_string}Windowsに移植可能で、少なくともBash 3.1と同じくらい古いバージョンで動作します。
エスケープについてあまり心配する必要がないことを示すために、これを有効にしましょう:
/home/name/foo/barこれに:
~/foo/barしかし/home/name、最初にある場合にのみ。必要ありませんsed!
bashが魔法の変数$PWDand を与えるとすると$HOME、次のことができます。
echo "${PWD/#$HOME/\~}"編集:引用/エスケープに関するメモのコメントでMark Haferkampに感謝し~ます。*
変数$HOMEにスラッシュがどのように含まれているのかに注意してください。
参考資料:Advanced Bash-Scripting Guide。
を使用sedする必要がある場合は、必ずすべての文字をエスケープしてください。
sed、pwdコマンドを使用できなくなりました$PS1。Bashは、マジック変数よりも一般的な方法で、コマンドの出力を文字列置換に使用できますか?あなたのコードについては、~Bashがそれを$ HOMEに展開しないように、をエスケープする必要がありました。また、#コマンドのは何をしますか?
                    ~」について:どのように引用したかに注意してください。常に引用することを忘れないでください!そして、これは魔法の変数だけでは機能しません。どの変数も、bash内で置換、文字列長の取得などが可能です。高速化を試みて、おめでとうございます。別のプログラミング言語に慣れていて、コンパイルされたプロンプトをコーディングしたい$PS1場合にも興味があるかもしれ$PROMPT_COMMANDません。
                    echo "${PWD/#$HOME/~}"私に代わるものではありません$HOMEで~。交換~し\~たり'~'作品。これらはいずれも、別のディストリビューションのBash 4.2.53で動作します。~互換性を高めるために、を引用またはエスケープするように投稿を更新できますか?「マジック変数」の質問で私が意味したunameことは、最初に変数として保存せずに、出力などでBashの変数置換を使用できるかどうかです。私の個人的なことは$PROMPT_COMMAND、複雑です。
                    純粋なPOSIXシェルメソッド。これは、Roman Kazanovskyiのsedベースの回答とは異なり、外部ツールを必要とせず、シェル自体のネイティブパラメーター拡張のみが必要です。コードが1行に収まるように、長いファイル名は最小化されていることに注意してください。
f="I love Suzi and Marry"
s=Sara
t=Suzi
[ "${f%$t*}" != "$f" ] && f="${f%$t*}$s${f#*$t}"
echo "$f"出力:
I love Sara and Marry使い方:
最小のサフィックスパターンを削除します。  "${f%$t*}"リターン「I love」サフィックスがあれば$t「Suzi*」です$f「」。  I love Suzi and Marry
しかしの場合t=Zelda、"${f%$t*}"何も削除せず、文字列「I love Suzi and Marry」全体を返します。
これがあれば、テストに使用され$tている$fと[ "${f%$t*}" != "$f" ]まで評価される真の場合$f、文字列が含まれています「Suzi*」と虚偽の場合ではありません。
テストが戻る場合は真、使用して目的の文字列を構築削除最小のサフィックス・パターンを ${f%$t*}「I love」と最小プレフィックスパターンを削除する ${f#*$t}「and Marryと、」第二の文字列$s「Saraの間で」。
私はこれが古いことを知っていますが、awkの使用について誰も言及していないので:
    firstString="I love Suzi and Marry"
    echo $firstString | awk '{gsub("Suzi","Sara"); print}'echo [string] | sed "s/[original]/[target]/g"