我試圖與它的轉義字符的字符串替換豎線:替換管道字符「|」與逃脫的點子字符「 |」在bash腳本串
輸入:「文| JDBC」 輸出:「文\ | JDBC」
我試圖與TR不同的東西:
echo "text|jdbc" | tr "|" "\\|"
...
但是沒有一次成功。 任何幫助,將不勝感激。 謝謝
我試圖與它的轉義字符的字符串替換豎線:替換管道字符「|」與逃脫的點子字符「 |」在bash腳本串
輸入:「文| JDBC」 輸出:「文\ | JDBC」
我試圖與TR不同的東西:
echo "text|jdbc" | tr "|" "\\|"
...
但是沒有一次成功。 任何幫助,將不勝感激。 謝謝
tr
非常適合字符的一對一映射(讀取「翻譯」)。 \|
是兩個字符,因此無法使用tr
。您可以使用sed
:
echo 'text|jdbc' | sed -e 's/|/\\|/'
這個例子替換一個|
。如果要更換多,加上g
標誌:
echo 'text|jdbc' | sed -e 's/|/\\|/g'
一個有趣的提示通過@JuanTomas是使用不同的分隔符爲更好的可讀性,例如:
echo 'text|jdbc' | sed -e 's_|_\\|_g'
你可以利用事實上,|
是一個特殊字符在bash
,這意味着使用printf
將逃脫它爲您的%q
修改:
$ printf '%q\n' "text|jdbc"
text\|jdbc
特殊對待不需要
|
一個更通用的解決方案是
$ f="text|jdbc"
$ echo "${f//|/\\|}"
text\|jdbc
${f//foo/bar}
擴展f
和替換bar
的foo
每一次出現。這裏的運營商是/
;當其後跟另一個/
時,它會替換所有出現的搜索模式,而不是第一個搜索模式。例如:
$ f="text|jdbc|two"
$ echo "${f/|/\\|}"
text\|jdbc|two
$ echo "${f//|/\\|}"
text\|jdbc\|two
您可以awk
嘗試:
echo "text|jdbc" | awk -F'|' '$1=$1' OFS="\\\|"
當我使用SED用斜槓或反斜槓的模式,我喜歡用'_'作爲分隔符:'回聲「文本| jdbc「| sed -e's_ | _ \\ | _'' –
工作正常!謝謝janos –
@JuanTomas不是一個壞主意,添加到我的文章 – janos