Sed для удаления пробелов

Кто-нибудь знает, как использовать Sed, чтобы удалить все пробелы в текстовом файле? Я пытался использовать команду удаления "d", чтобы сделать это, но не могу понять это

2 ответа

Что за "космос"?

"Удалить все пробелы" может означать одну из следующих вещей:

  1. удалить все вхождения пробела, код 0x20,
  2. удалить все горизонтальное пространство, включая символ горизонтальной табуляции, "\t"
  3. удалить все пробелы, включая перевод строки "\n" и другие

Правильный инструмент для работы

Если sed это не требование по какой-то скрытой причине, лучше использовать правильный инструмент для работы.

Команда tr в основном используется для перевода (отсюда и названия "tr") списка символов в список других символов. В качестве углового случая его можно перевести на пустой список символов; Опция -d (--delete) удалит символы, которые появятся в списке.

Список символов может использовать классы символов в [:...:] синтаксис.

  1. tr -d ' ' < input.txt > no-spaces.txt
  2. tr -d '[:blank:]' < input.txt > no-spaces.txt
  3. tr -d '[:space:]' < input.txt > no-spaces.txt

Настаивая на sed

С седом [:...:] синтаксис для классов символов должен быть объединен с синтаксисом для наборов символов в регулярных выражениях, [...]в результате чего несколько запутанным [[:...:]]:

  1. sed 's/ //g' input.txt > no-spaces.txt
  2. sed 's/[[:blank:]]//g' input.txt > no-spaces.txt
  3. sed 's/[[:space:]]//g' input.txt > no-spaces.txt

Вы можете использовать это, чтобы удалить все пробелы в file:

 sed -i "s/ //g" file

Возможно , это слишком поздно, но sed принимает на вход регулярное выражение. '\s' - это выражение всех пробелов. Так sed s/'\s'//gдолжен делать свою работу. ура

Другие вопросы по тегам