我不确定我是否误解了某些内容或只是没有正确搜索。但是,我有一个问题,我正在使用简单的 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"