讓我們看一下爲什麼你目前的努力是失敗:
$ echo '•test' | hexdump -C
00000000 e2 80 a2 74 65 73 74 0a |...test.|
00000008
這些子彈實際上是三個字節 - e2 80 a2
,不是一個單一的0x95
。
校正的SED表達正常工作:
echo '•test' | sed -e 's/•/ /g'
...或(使用/bin/sh
不可用的bash擴展語法)...
echo '•test' | sed -e $'[email protected]\xe2\x80\[email protected] @g'
...或(使用bash -builtin替換功能):
s='•test' # original string in s
orig='•' # item to replace
new=' ' # thing to replace it with
s2=${s//"$orig"/$new} # result in s2
...或(使用GNU sed擴展,每@anubhava)...
echo '•test' | sed '[email protected]\xe2\x80\[email protected] @g'
或者:'echo'•test'| sed's/\ xe2 \ x80 \ xa2 /'' – anubhava
爲什麼使用at符號(@)?我使用以下命令進行測試:echo'•test'| sed's/\ xe2 \ x80 \ xa2// g'。有用。 – user2874781
@ user2874781,我習慣使用'@'作爲習慣,因爲'/'經常存在被替換的內容,使得它成爲sigil的一個糟糕的選擇。在這種特殊情況下,既不存在,也不會以任何方式產生特別的差別。(在許多情況下,選擇一個不能在數據內部的印記的需要使得'sed'完全是一個糟糕的工具選擇)。 –