私は "Suzi and Marryが大好きです"を持っていますが、 "Suzi"を "Sara"に変更したいです。
#!/bin/bash
firstString="I love Suzi and Marry"
secondString="Sara"
# do something...
結果は次のようになります。
firstString="I love Sara and Marry"
firstの出現箇所を指定の文字列に置き換えるには、${parameter/pattern/string}
を使用します。
#!/bin/bash
firstString="I love Suzi and Marry"
secondString="Sara"
echo "${firstString/Suzi/$secondString}"
# prints 'I love Sara and Marry'
allオカレンスを置き換えるには、${parameter//pattern/string}
を使用します。
message='The secret code is 12345'
echo "${message//[0-9]/X}"
# prints 'The secret code is XXXXX'
(これは Bashリファレンスマニュアル、§3.5.3 "シェルパラメータの拡張" に記載されています。)
この機能はPOSIXでは指定されていないことに注意してください - それはBash拡張です - それですべてのUnixシェルがそれを実装しているわけではありません。関連するPOSIX文書については、 オープングループ技術標準ベース仕様書、第7号、シェル&ユーティリティ巻、§2.6.2 "パラメータ拡張" を参照してください。
これは完全に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"
これを試して:
sed "s/Suzi/$secondString/g" <<<"$firstString"
文字列にRegExp文字が含まれている場合は、sed
よりもbashを使用する方が適切です。
echo ${first_string/Suzi/$second_string}
Windowsに移植可能で、少なくともBash 3.1と同じくらい古いもので動作します。
あなたが逃げることについてあまり心配する必要がないことを示すために、これを回しましょう:
/home/name/foo/bar
これに:
~/foo/bar
/home/name
が最初にある場合に限ります。 sed
は必要ありません。
Bashがマジック変数$PWD
と$HOME
を与えるとすれば、次のことができます。
echo "${PWD/#$HOME/\~}"
編集: ~
の引用/エスケープに関するメモのコメントでMark Haferkampに感謝します。*
変数$HOME
にスラッシュが含まれていることに注意してくださいが、これは何も壊しませんでした。
さらに読むこと: 高度なBashスクリプトガイド 。sed
を使用することが必須である場合は、必ず すべての文字をエスケープする 。
Dashについては、以前の投稿はすべて機能していません
POSIXのsh
互換性のある解決策は:
result=$(echo "$firstString" | sed "s/Suzi/$secondString/")
明日あなたがあなたが結婚を愛していないと決めたなら、彼女も同様に取り替えることができます:
today=$(</tmp/lovers.txt)
tomorrow="${today//Suzi/Sara}"
echo "${tomorrow//Marry/Jesica}" > /tmp/lovers.txt
恋人を去るには50通りの方法があるはずです。
私はコメントを加えることができないので。 @ruaka例を読みやすくするには、次のように書きます。
full_string="I love Suzy and Mary"
search_string="Suzy"
replace_string="Sara"
my_string=${full_string/$search_string/$replace_string}
or
my_string=${full_string/Suzy/Sarah}