1

シェルスクリプトに次のコードがあります

a=$(cat php1.php | grep 'hello')
echo $a
sed -i 's/'"$a"'/world/' php1.php

変数は正しく出力されています。ただし、パラメータとしてsedコマンドに渡すと、sedコマンドが機能しません。

どこが間違っているのですか?

4

3 に答える 3

2

コマンドは完全に機能します。

sed -i 's/'"$a"'/world/' php1.php

ただし、sedコマンドでは二重引用符を使用してシェル変数を自動的に展開できます。代わりにこれを試してください:

sed -i "s/$a/world/" php1.php

私はあなたが何を達成しようとしているのか完全には理解していないかもしれませんが、あなたが(かなり丸い方法で)置き換えようとしているなら、あなたはhelloあなたのコマンドにフラグをworld追加したいかもしれません:-ogrep

a=$(grep -o "hello" php1.php)
于 2012-12-04T14:31:42.077 に答える
0

$aの値を確認してください。$aにはいくつかの空間文字が含まれていると思います。

于 2012-12-04T10:26:21.207 に答える
0

スクリプトの意図は、「hello」という単語を含む php1.php のすべての行を「world」という単語に置き換えることのようです。それはちょうどこれでしょう:

sed -i 's/.*hello.*/world/' php1.php

何か他のことをしようとしている場合は、それが何であるかをお知らせください。お手伝いさせていただきます。

于 2012-12-06T01:48:39.570 に答える