シェルスクリプトに次のコードがあります
a=$(cat php1.php | grep 'hello')
echo $a
sed -i 's/'"$a"'/world/' php1.php
変数は正しく出力されています。ただし、パラメータとしてsedコマンドに渡すと、sedコマンドが機能しません。
どこが間違っているのですか?
コマンドは完全に機能します。
sed -i 's/'"$a"'/world/' php1.php
ただし、sed
コマンドでは二重引用符を使用してシェル変数を自動的に展開できます。代わりにこれを試してください:
sed -i "s/$a/world/" php1.php
私はあなたが何を達成しようとしているのか完全には理解していないかもしれませんが、あなたが(かなり丸い方法で)置き換えようとしているなら、あなたはhello
あなたのコマンドにフラグをworld
追加したいかもしれません:-o
grep
a=$(grep -o "hello" php1.php)
$aの値を確認してください。$aにはいくつかの空間文字が含まれていると思います。
スクリプトの意図は、「hello」という単語を含む php1.php のすべての行を「world」という単語に置き換えることのようです。それはちょうどこれでしょう:
sed -i 's/.*hello.*/world/' php1.php
何か他のことをしようとしている場合は、それが何であるかをお知らせください。お手伝いさせていただきます。