複数のファイルの1行を置き換える必要がありますが、sedを使用してソリューションを探しています。次のエラーが発生します。
sed: -e 式 #1、文字 31: 終了していない 's' コマンド
次の行を含むbashスクリプトを実行しようとしたとき:
sed -i.bak "s/some-text-string/some-text-string ${stringVar}/" *.ext
これがこの問題を引き起こす可能性がある空白であることを知っていますが、どこにも解決策が見つかりません。交換するときはスペースを保存する必要があります。文字列を追加することを検討しましたが、他の機能を使用しても多くの進歩を達成できませんでした。
私はおそらくこの問題に間違ってアクセスしていて、他の機能を使用する必要があるような気がしますが、sedやbashの経験が多くないため、詰まっていました。
誰でも可能な解決策を明らかにすることができれば幸いです。
答え1
スペースやタブは問題を引き起こしませんが、改行によってsedコマンドが中断される可能性があります。問題は、シェル変数が他のプログラミング言語からわかるように、実際の変数ではなくマクロに似ていることです。
実際の変数を使用する実際のプログラミング言語に切り替えると、この問題は解決されます。たとえば、構文を同様に維持するために、Perlソリューションは次のようになります。
r=$stringVar perl -i.bak -pe 's/some-text-string/some-text-string$ENV{r}/' -- *.ext
コマンドに値を事前に割り当てると、変数はコマンド実行環境の一部になります。