sedを使用して環境変数をディレクトリパスに置き換える

sedを使用して環境変数をディレクトリパスに置き換える

私が何かを間違って理解したのか、それとも検索が間違っているのかわかりません。しかし、問題があります。 $ SYNCに一致する文字列部分を置き換えるには、単純なechoコマンドとsedのパイピングを使用してテストし、それを/home/pi/syncに置き換えます。

私がテストした内容は次のとおりです。

echo '$SYNC/somedirectory' | sed 's|"$SYNC"|"/home/pi/sync"|'

それはずっと返すんだ

$SYNC/somedirectory

私が理解したところ、上記のsedコマンドは$ SYNCを/home/pi/syncに置き換えます。

次のように大きな線で使用します。

grep -w "file_path =" /home/pi/lightshowpi/config/state.cfg | sed 's/.*= //'| (this is where I need to replace the $SYNC with /home/pi/sync) | xargs mp3info -p "%a"

デフォルトでは、ファイルパスを含む行を取得し、「=」の後のすべてのエントリを取得し、$ SYNC / file.mp3を返します。その後、mp3infoにパイプしてmp3情報を取得できます。

2番目のsedコマンドなしで試しましたが、環境変数が拡張されず、そのディレクトリがないというエラーが返されます。例:

$SYNC/mp3file.mp3 does not exist

ただし、$ SYNCを/home/pi/sync/mp3file.mp3に手動で置き換えると正常に動作します。

私はsedを使用せずに他の方法を使用できます。 sedが最も簡単な方法になると思います。

ベストアンサー1

答えを見つけました。シェルの経験が足りなかったために発生した単純な間違いでした。

grep -w "file_path =" /home/pi/lightshowpi/config/state.cfg | sed 's/.*= //'| sed 's|'\$SYNC'|'/home/pi/sync'|' | xargs mp3info -p "%a"

おすすめ記事