Shell

使用 sed 將環境變數替換為目錄路徑

  • December 2, 2016

我不確定我是否誤解了某些內容或只是沒有正確搜尋。但是,我有一個問題,我正在使用簡單的 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 是最簡單的方式。

我已經找到了答案,這是一個簡單的錯誤,因為我對 shell 沒有經驗

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

引用自:https://unix.stackexchange.com/questions/327617