逆参照を使用しても、複数のパターンの変数のテキストを同時に置き換える方法はありますか?
たとえば、FILE=filename.ext
に変更したいのですがfilename_sometext.ext
、ファイル拡張子が何であるかわかりません.ext
。私が知っているのは、拡張子が最後の点の後ろにあるということだけです。したがって、2つのステップで行うことができます。
EXT=${FILE##*.}
FILE=${FILE%.*}_sometext.$EXT
1つのステップで完了できますか(例:${FILE/.\(*\)/_sometext.\1}
[これは機能しません])?
sed
しかし、/などのない純粋なawk
シェルでこれを行う必要があります。私のシェルはですがksh
、bashismsでこれを行う方法があればそれも知りたいです。
ベストアンサー1
Bash パラメータ拡張表現変数(FILE
例では)はパラメータ名でなければなりません。だから彼らは巣を作らない。最後の部分は${param/pattern/replacement}
文字列でなければなりません。したがって、逆参照はサポートされていません。
私の唯一の提案は、以下を使用することです。
${EXT:+.$EXT}
ファイルに拡張子がない場合に後ろにドットを追加したくない場合。
修正する
明らかに逆参照がサポートされていますクッシュ 93。
だからあなたは次のようなものを使うことができます
FILE="${FILE/@(.*)/_something\1}"