簡體   English   中英

將\\ n替換為 <br /> 猛撲

[英]Replace \n with <br /> in bash

[更新的問題]

我有一個變量$CHANGED ,它存儲如下所示的subversion命令的輸出: 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

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

在bash中:

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

請參閱參數擴展

您可以修改hek2mgl的答案去除第一個<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')" 

手冊頁的“ 參數擴展”部分是您的朋友。

從...開始

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 />}"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM