Удалить только один пробел в текстовом файле с помощью sed, perl, awk, tr или чего-либо еще

У меня довольно большой текстовый файл, где между каждым символом есть дополнительное пространство;

Я тулоксликет это. 

Я хотел бы удалить эти дополнительные символы так

Похоже на это. 

через терминал Linux. Кажется, я никак не могу сделать это, не удаляя все пробелы. Я готов попробовать любое решение на данный момент. Буду признателен за любое движение в правильном направлении.

5 ответов

Решение
$ echo 'I t   l o o k s   l i k e   t h i s .  ' | sed 's/\(.\) /\1/g'
It looks like this. 

Вы уверены, что промежуточные символы являются пробелами? Скорее всего, это файл UTF-16.

Я предлагаю вам использовать способный редактор, чтобы открыть его как таковой и конвертировать в UTF-8.

awkрешение

echo "I t   l o o k s   l i k e   t h i s ." | awk '{for (i=1;i<=NF;i+=2) printf $i;print ""}' FS=""
It looks like this.
perl -pe 's|(\s+)| " "x (length($1)>1) |ge' file

Пока от каждого другого персонажа вы хотите избавиться, вы можете использовать python.

>>> s = "I t   l o o k s   l i k e   t h i s ."
>>> print s[0::2]
It looks like this.

Если вы хотите сделать это для текстового файла, сделайте следующее:

with open("/path/to/file.txt") as f:
    f = f.readlines()

with open("/path/to/new.txt") as g:
    for i in f:
        g.write(str(i)[0::2]+"\n")
Другие вопросы по тегам