2017-07-17 107 views
-1

[增訂問題]在bash替換 n,其中<br />

我有一個可變$CHANGED,其存儲這樣的顛覆命令的輸出:CHANGED="$(svnlook changed -r $REV $REPOS)"

執行svnlook changed -r $REV $REPOS將輸出下面的命令行:

A /path/to/file 
A /path/to/file2 
A /path/to/file3 

然而,我需要存儲格式化的輸出作爲在可變$FILES如下所示:

A /path/to/file<br />A /path/to/file2<br />A /path/to/file3<br /> 

我需要這個使用$FILES生成如下電子郵件按鈕的命令:

sendemail [some-options] $FILES 

它應該用A /path/to/file<br />A /path/to/file2<br />A /path/to/file3<br />替換$FILES,以便它可以解釋html中斷標記。

回答

3

在bash:

echo "${VAR//$'\n'/<br />}" 

參見Parameter Expansion

+0

感謝,我該如何存儲在其他變量輸出?我需要在名爲「sendemail」的程序中調用這個變量。我需要像這樣調用它:'sendemail $ VAR'。 Sendemail理解html,所以我需要一種方法將這些換行符傳遞給它。 – WalterBeiter

+0

該命令不起作用。我用更多的細節更新了這個問題。 – WalterBeiter

+0

它應該是'FILES =「$ {VAR // $'\ n'/
}」' – hek2mgl

0

可以修改hek2mgl's answer到剝離出第一<br />(如果有的話):

CHANGED=" 
A /path/to/file 
A /path/to/other/file 
A /path/to/new/file 
" 

FILES="$(echo "${CHANGED//$'\n'/<br />}" | sed 's#^<br />##g')" 

echo "$FILES" 

輸出:

A /path/to/file<br />A /path/to/other/file<br />A /path/to/new/file<br /> 


另一種方式(只有 sed):

FILES="$(echo "$CHANGED" | sed ':a;N;$!ba;s#\n#<br />#g;s#^<br />##g')" 
+0

沒有工作。 echo「$ FILES」給我一行沒有任何東西。 – WalterBeiter

+0

@WalterBeiter:我認爲你做錯了什麼,檢查變量是否有拼寫錯誤。爲了方便起見,我正在更新我的評論,將確切內容複製粘貼到終端並按回車。 – Jahid

+1

bash參數擴展和'sed'的這種組合是a)無效,醜陋和b)在這裏沒有必要。不是,因爲'$ CHANGED'開頭沒有換行符,最後需要'
'。如果應該有必要,那麼使用一個工具,而不是使用工具a和工具b使用50%,使用工具b使用50%。 – hek2mgl

0

手冊頁的Parameter Expansion部分是你的朋友。

changed=" 
A /path/to/file 
A /path/to/other/file 
A /path/to/new/file 
" 

開始,你可以刪除開頭和結尾使用#%擴展換行符:

files="${changed#$'\n'}" 
files="${files%$'\n'}" 

然後用<br />取代其他換行符:

files="${files//$'\n'/<br />}" 

示範:

printf '***%s***\n' "$files" 
***A /path/to/file<br />A /path/to/other/file<br />A /path/to/new/file*** 

(請注意,我已經改變了你的全部大寫的變量名稱爲小寫。避免爲當地人使用大寫字母,因爲這些名字通常用於通過環境進行溝通。)


如果你不喜歡寫換行符爲$'\n',你當然可以將其存儲在一個變量:

nl=$'\n' 
files="${changed#$nl}" 
files="${files%$nl}" 
files="${files//$nl/<br />}"