使用 sed 将环境变量替换为目录路径

使用 sed 将环境变量替换为目录路径

我不确定我是否误解了某些内容或只是没有正确搜索。但是,我有一个问题,我正在使用简单的 echo 命令进行测试,并通过管道传输到 sed 以替换与 $SYNC 匹配的部分字符串并替换为 /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 信息。

我尝试过不使用第二个 sed 命令,但环境变量没有扩展,并且返回没有此类目录的错误,例如:

$SYNC/mp3file.mp3 does not exist

但是当我用 /home/pi/sync/mp3file.mp3 手动替换 $SYNC 时,它工作正常。

我对不使用 sed 的任何其他方式持开放态度,我只是认为 sed 将是最简单的方式。

答案1

我已经找到答案了,由于我对 shell 缺乏经验,这是一个简单的错误

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

相关内容