将非ASCII字符转换为空格

时间:2014-12-22 08:40:29

标签: bash perl shell unix

我想将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

3 个答案:

答案 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只有一个空格。