## XXX##のすべてのオカレンスを${XXX}に変換するには、sedを使用する必要があります。Xは、任意の英字または「_」にすることができます。私は次のようなものを使用する必要があることを知っています:
's/##/\${/g'
しかしもちろん、##FOO##を${FOO$ {に変換するため、これは適切ではありません。
テイカーはいますか?- ドン
より良い代替正規表現のショットを次に示します。
's/##\([a-zA-Z_]\+\)##/${\1}/g'
または、正確に 3 文字と仮定すると、次のようになります。
's/##\([a-zA-Z_]\{3\}\)##/${\1}/g'
's/##\([a-zA-Z_]\+\)##/${\1}/g'
これを使って:
s/##\([^#]*\)##/${\1}/
ところで、「s」演算子の右側で$をエスケープする必要はありません。
sed 's/##\([a-zA-Z_][a-zA-Z_][a-zA-Z_]\)##/${\1}/'
\(...\)
覚えています...そして展開のように参照され\1
ます。正気を保つために一重引用符を使用してください。
この下のコメントに記載されているように、これは次のように契約することもできます。
sed 's/##\([a-zA-Z_]\{3\}\)##/${\1}/'
この回答は、例で正確に3文字を一致させる必要があることを前提としています。ハッシュマークの間にあるものに応じて、複数のバリエーションがあります。重要な部分は、一致した文字列の一部を記憶することです。
echo "##foo##" | sed 's/##/${/;s//}/'
s
デフォルトで1回だけ変更s//
take last 検索パターンが使用されたので、 seconds s も取り##
、2 番目のオカレンスのみが存在しますsed の/([^az] [^AZ] [^0-9]*)/(&)/pg