我在我們的源檔案中得到一個特殊字符--'"'。 我們使用下面的sed命令將'"'字符替換為'&',但操作并不成功。
cat File.txt | sed 's/x2xE1/&/g' > File_New.txt
"的HEX代碼是#x201E;
uj5u.com熱心網友回復:
我認為perl在處理Unicode文本方面遠比sed優越(這里假設你的檔案是用UTF-8編碼的):
$ cat input.txt
foo " bar
$ perl -CSD -pe 's/N{U 201E}/& /g' input.txt
foo & bar
(-CSD告訴perl,標準輸入/輸出/錯誤和所有打開的檔案都使用UTF-8)
但是(在適當的區域設定下)你可以使用sed和一個像bash這樣的shell來實作ANSI-C quoting來生成這個字符:
$ sed 's/'$'u201E''/& /g' input.txt
foo & bar
或者直接包括代碼點的UTF-8位元組,而不是使用轉義序列,通常也可以:
$ sed 's/"/&/g' input.txt
foo & bar
有些版本的sed,比如GNU的版本,支持xHH來表示一個具有給定十六進制值的位元組,但是Unicode編碼點U 201E在UTF-8中沒有用這些位元組編碼;相反,它是三個位元組的序列E2 80 9E
$ sed 's/xE2x80x9E/& /g' input.txt
foo & bar
所有的
sed例子都在替換中轉義了&,因為如果沒有前面的反斜杠,&就會被匹配的文本所替換,讓你回到你開始的地方。
uj5u.com熱心網友回復:
使用最近的 GNU sed:
$ printf 'u201E
' | hd
00000000 e2 80 9e 0a |....|
00000004
$ printf 'au201Eb
' | LC_ALL=C sed 's/xe2x80x9e/&/g
a&b
檔案。info sed -n 'Locale Considerations'
由于&是sed的s命令的替換部分中的一個元字符,它必須被轉義。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/318113.html
標籤:
上一篇:明確鏈接到libc(-lc)。
