我想将Unix中出现的所有非ASCII字符替换为空格,但所有字符的组应转换为单个空格,如:
CHAVEZ MONTA�O should be converted to CHAVEZ MONTAO<followed by one space>
我该怎么办?我使用了以下Perl命令:
grep --color='auto' -P -n "[\x80-\xFF]" file.xml
但这是在一个空间中转换一个单独的字符,这不是我想要的。
EDIT1:
我知道CHAVEZ MONTA�O
转换为CHAVEZ MONTA O
更有意义。但如果是
CHAVEZ MONTAO<followed by one space>
但请也建议CHAVEZ MONTA O
。
答案 0 :(得分:1)
好像你想要这样的东西,
$ echo 'CHAVEZ MONTA�O' | perl -pe 's/[^[:ascii:]]+/ /g'
CHAVEZ MONTA O
$ echo 'CHAVEZ MONTA�O' | perl -pe 's/([^[:ascii:]]+)(.)/\2 /g'
CHAVEZ MONTAO
$ echo 'CHAVEZ MONTA�O' | perl -pe 's/�/ /g'
CHAVEZ MONTA O
$ echo 'CHAVEZ MONTA�O' | perl -pe 's/�([[:ascii:]])/\1 /g'
CHAVEZ MONTAO
答案 1 :(得分:0)
Pure Bash:
shopt -s extglob
var="CHAVEZ MONTA�O"
echo "${var//+([^[:ascii:]])/ }"
答案 2 :(得分:0)
如果你使用这个sed,你可以这样做:
sed -s 's/[\d128-\d255]\+/ /' < INPUTFILE
它取代所有字符&gt; 128只有一个空格。