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

28

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

Джастин
источник

Ответы:

35

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

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

  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

С помощью 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
Volker Siegel
источник
1
+1, обозначение POSIX для пробела является подходящим способом.
Авинаш Радж
1
Отличный совет, чтобы использовать tr для этой задачи, прекрасно работает. Единственное, что мне нужно было отрегулировать, было то, что tr считывает входные данные из stdin, поэтому у меня получилось tr -d ' ' < input.txt > no-spaces.txt.
Sky
Комментарий @ Sky работает в моей macOS (не тестировался в Linux). Может быть, ответ должен быть обновлен?
iplus26
Большое спасибо @Sky, это действительно плохая ошибка. trСейчас я исправлю три строки . (Видите ли вы это где-нибудь еще?)
Volker Siegel
7

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

 sed -i "s/ //g" file
Кир
источник
2
Нет кости. Я тоже пробовал подобный подход. Не работает
Джастин
Вы хотите удалить пробелы или вкладки?
Сайрус
1
удалить пробел
Джастин
2
Простой тест:man sed | sed "s/ //g"
Сайрус
1
@starscream_disco_party: это то же самое. Вы можете заменить все 3 /другим символом, например:sed "ss ssg"
Cyrus