請參閱這些簡單的命令中使用反斜槓:如何處理在sed
$ echo $tmp
UY\U[_
$ echo "a" | sed "s|a|${tmp}|g"
UY[_
看到了什麼? 「\ U」被吃掉了。其他反斜槓也不會生存。
問題是,如何使上述命令按預期工作?
請注意,代碼不是真正的解決方案;我只是簡單地解釋說明。 我必須使用一個變量,變量肯定有反斜槓。
請評論。謝謝!
XM
請參閱這些簡單的命令中使用反斜槓:如何處理在sed
$ echo $tmp
UY\U[_
$ echo "a" | sed "s|a|${tmp}|g"
UY[_
看到了什麼? 「\ U」被吃掉了。其他反斜槓也不會生存。
問題是,如何使上述命令按預期工作?
請注意,代碼不是真正的解決方案;我只是簡單地解釋說明。 我必須使用一個變量,變量肯定有反斜槓。
請評論。謝謝!
XM
TMP本身重新分析$如果它只是由SED和逃避只是足以 「吃掉」 反斜槓,然後嘗試:
echo "a" | sed "s|a|${tmp//\\/\\\\}|g"
給你足夠的困惑? \\
代表一個\因爲它也需要在外殼中逃脫。 inital //
與s/foo/bar/g
中的g
修飾符類似,如果您只想要替換第一個出現的模式,請跳過它。
約${parameter/pattern/string}
的文檔可以在這裏找到:http://www.gnu.org/s/bash/manual/bash.html#Shell-Parameter-Expansion
編輯:取決於你想要做什麼,你可能會不使用SED這個實際上是更好的。
$ tmp="UY\U[_"
$ in="a"
$ echo ${in//a/$tmp}
UY\U[_
您可以通過sed的
echo "a" | sed "s|a|$(echo ${tmp} | sed 's|\\|\\\\|g')|g"
我想這個解決方案,得到了這個:$回聲$ TMP A \ UB $回聲 「一個」 | sed「s | a | $(echo $ {tmp} | sed's | \\ | \\\\ | g')| g」 A \ UB 不確定。我選擇了另一種解決方案,因爲它需要更少的管道和sed。我仍然感激你的回答。 –
我選擇了這個解決方案。謝謝!我使用sed來處理文件。神祕的字符串是編碼的密碼。 –