Linux удалить все пробелы

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

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

2 ответа

Можно использовать это для удаления всех пробелов в file :

Какое «пространство»?

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

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

правильный инструмент для задания

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

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

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

  1. tr -d ‘ ‘ no-spaces.txt
  2. tr -d ‘[:blank:]’ no-spaces.txt
  3. tr -d ‘[:space:]’ no-spaces.txt

При настаивании sed

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

Источник

как удалить все пробелы в тексте?

Через командную строку стандартными средствами. Подскажите, пожалуйста.

Не могли бы Вы мне разъяснить суть каждой составляющей этой команды?

Нет, вы, кажется, не поняли. Уже есть файл с текстом, как в нем выпилить все пробелы?

Вообще все пробелы и только пробелы:

Все пробелы и символы табуляции так:

Только символы табуляции так :

Замена нескольких пробелов одним:

В данном случае от 2 до 5 стоящих подряд пробелов заменяются одним.

Какой-то вырвиглазый синтаксис у этого sed)

Это регулярные выражения, при чём простые.

  • s/// — замена
  • после «s/ и перед \ < указан символ, в данном случае пробел, ' ' - можно и так
  • \ <2,5\>— число повторений блоков символов, указанные перед интервалом
  • \ — экранирование, что бы < и >не рассматривались как конструкции интерпретатоа (bash)
  • g — все включения в файла
  • -i — работать с файлом

Ну или простой способ проникнуться:

\ — экранирование, что бы < и >не рассматривались как конструкции интерпретатоа (bash)

в пределах «» они и не рассматриваются. просто posix re требуют их экранировать
в extended posix re их не нужно экранировать, для этого у сед есть ключик -r

не надо трясти своим невежеством в очередной раз

Я читал про это. Мне не нужен патч Бармина-все пока не так плохо

Источник

Как обрезать начальные и конечные пробелы в каждой строке некоторого вывода?

Я хотел бы удалить все начальные и конечные пробелы и вкладки из каждой строки в выводе.

Есть ли простой инструмент, как trim я мог бы передать свой вывод?

Обрезает начальные и конечные пробелы или символы табуляции 1, а также сжимает последовательности табуляций и пробелов в один пробел.

Это работает, потому что когда вы назначаете что-то одному из полей , awk перестраивает всю запись (как напечатано print ), объединяя все поля ( $1 , . $NF ) с OFS (пробел по умолчанию).

1 (и, возможно, другие пустые символы в зависимости от локали и awk реализации)

Команду можно сжать примерно так, если вы используете GNU sed :

пример

Вот приведенная выше команда в действии.

Вы можете использовать, hexdump чтобы подтвердить, что sed команда удаляет нужные символы правильно.

Классы персонажей

Вы также можете использовать имена классов символов вместо буквального перечисления наборов, таких как [ \t] :

пример

Большинство инструментов GNU, использующих регулярные выражения (регулярные выражения), поддерживают эти классы.

Использование их вместо литеральных наборов всегда кажется пустой тратой пространства, но если вы обеспокоены тем, что ваш код переносим, ​​или вам приходится иметь дело с альтернативными наборами символов (например, международными), то вы, вероятно, захотите использовать имена классов вместо.

Источник

Linux удалить все пробелы

Команда tr (translate) используется в Linux в основном для преобразования и удаления символов. Она часто находит применение в скриптах обработки текста. Ее можно использовать для преобразования верхнего регистра в нижний, сжатия повторяющихся символов и удаления символов.

Команда tr требует два набора символов для преобразований, а также может использоваться с другими командами, использующими каналы (пайпы) Unix для расширенных преобразований.

В этой статье мы узнаем, как использовать команду tr в операционных системах Linux и рассмотрим некоторые примеры.

Команда tr и ее синтаксис

Ниже приведен синтаксис команды tr. Требуется, как минимум, два набора символов и опции.

SET1 и SET2 это группы символов. are a group of characters. Необходимо перечислить необходимые символы или указать последовательность.

\NNN -> восмеричные (OCT) символы NNN (1 до 3 цифр)

\\ -> обратный слеш (экранированный)

\n -> новая строка (new line)

\r -> перенос строки (return)

\t -> табуляция (horizontal tab)

[:alnum:] -> все буквы и цифры

[:alpha:] -> все буквы

[:blank:] -> все пробелы

[:cntrl:] -> все управляющие символы (control)

[:digit:] -> все цифры

[:lower:] -> все буквы в нижнем регистре (строчные)

[:upper:] -> все буквы в верхнем регистре (заглавные)

Примеры использования команды tr:

Вот некоторые опции:

-c , -C , —complement -> удалить все символы, кроме тех, что в первом наборе
-d , —delete -> удалить символы из первого набора
-s , —squeeze-repeats -> заменять набор символов, которые повторяются, из указанных в последнем наборе знаков

1) Заменить все строчные буквы на заглавные

Мы можем использовать tr для преобразования нижнего регистра в верхний или наоборот.

Просто используем наборы [:lower:] [:upper:] или «a-z» «A-Z» для замены всех символов.

Вот пример, как преобразовать в Linux с помощью команды tr все строчные буквы в заглавные:

А сейчас сделаем замену из файла input.txt

Как мы видим, в файле ничего не изменилось, осталось все строчными буквами. Чтобы изменения были в файле, на необходимо перевести вывод в новый файл. Например, в output.txt

Кстати, в команде sed есть опция y которая делает то же самое (sed ‘y/SET1/SET2’)

2) Удаление символов с помощью tr

Опция -d используется для удаления всех символов, которые указаны в наборе символов.

Следующая команда удалит все символы из этого набора ‘aei’.

Следующая команда удалит все цифры в тексте. Будем использовать набор [:digit:] , чтобы определить все цифры.

А вот пример команд, которыми можно удалить переносы на новые строки

3) Удаление ила змена символов НЕ в наборе

С помощью параметра -c Вы можете сказать tr заменить все символы, которые Вы не указали в наборе. Приведем пример.

А вот пример удаления, просто укажем опцию -d и только один набор (символы которого удалять НЕ надо, а остальные удалить)

4) Замена пробелов на табуляцию

Для указания пробелов используем — [:space:] , а для табуляции — \t.

5) Удаление повторений символов

Это делает параметр -s . Рассмотрим пример удаления повторов знаков.

Или заменим повторения на символ решетки

6) Заменить символы из набора на перенос строки

Сделаем так, чтобы все буквы были заменены на перенос новой строки:

7) Генерируем список уникальных слов из файла

Это иногда очень полезная команда, когда необходимо определить количество повторений и вывести уникальные слова из файла:

8) Кодируем символы с помошью ROT

ROT (Caesar Cipher) — это тип криптографии, в котором кодирование выполняется путем перемещения букв в алфавите к его следующей букве.

Давайте проверим, как использовать tr для шифрования.

В следующем примере каждый символ в первом наборе будет заменен соответствующим символом во втором наборе.

Первый набор [a-z] (это значит abcdefghijklmnopqrstuvwxyz). Второй набор [n-za-m] (который содержит pqrstuvwxyzabcdefghijklmn).

Простая команда для демонстрации вышеуказанной теории:

Полезно при шифровании электронных адресов:

Вывод

tr — это очень мощная команда линукс при использовании пайпов Unix и очень часто используется в скриптах. Дополнительную информацию об этой утилите всегда можно найти в man.

Если у Вас есть какие-либо дополнения, не стесняйтесь пишите в комментариях.

Источник

12.4. Команды обработки текста

Сортирует содержимое файла, часто используется как промежуточный фильтр в конвейерах. Эта команда сортирует поток текста в порядке убывания или возрастания, в зависимости от заданных опций. Ключ -m используется для сортировки и объединения входных файлов. В странице info перечислено большое количество возможных вариантов ключей. См. Пример 10-9, Пример 10-10 и Пример A-9.

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

Удаляет повторяющиеся строки из отсортированного файла. Эту команду часто можно встретить в конвейере с командой sort.

Ключ -c выводит количество повторяющихся строк.

Команда sort INPUTFILE | uniq -c | sort -nr выводит статистику встречаемости строк в файле INPUTFILE (ключ -nr, в команде sort, означает сортировку в порядке убывания). Этот шаблон может с успехом использоваться при анализе файлов системного журнала, словарей и везде, где необходимо проанализировать лексическую структуру документа.

Пример 12-8. Частота встречаемости отдельных слов

Команда expand преобразует символы табуляции в пробелы. Часто используется в конвейерной обработке текста.

Команда unexpand преобразует пробелы в символы табуляции. Т.е. она является обратной по отношению к команде expand.

Предназначена для извлечения отдельных полей из текстовых файлов. Напоминает команду print $N в awk, но более ограничена в своих возможностях. В простейших случаях может быть неплохой заменой awk в сценариях. Особую значимость, для команды cut, представляют ключи -d (разделитель полей) и -f (номер(а) поля(ей)).

Использование команды cut для получения списка смонтированных файловых систем:

Использование команды cut для получения версии ОС и ядра:

Использование команды cut для извлечения заголовков сообщений из электронных писем:

Использование команды cut при разборе текстового файла:

cut -d ‘ ‘ -f2,3 filename эквивалентно awk -F'[ ]’ ‘< print $2, $3 >‘ filename

Используется для объединения нескольких файлов в один многоколоночный файл.

Может рассматриваться как команда, родственная команде paste. Эта мощная утилита позволяет объединять два файла по общему полю, что представляет собой упрощенную версию реляционной базы данных.

Команда join оперирует только двумя файлами и объедияет только те строки, которые имеют общее поле (обычно числовое), результат объединения выводится на stdout. Объединяемые файлы должны быть отсортированы по ключевому полю.

На выходе ключевое поле встречается только один раз.

Выводит начальные строки из файла на stdout (по-умолчанию — 10 строк, но это число можно задать иным). Эта команда имеет ряд интересных ключей.

Пример 12-9. Какие из файлов являются сценариями?

Пример 12-10. Генератор 10-значных случайных чисел

Выводит последние строки из файла на stdout (по-умолчанию — 10 строк). Обычно используется для мониторинга системных журналов. Ключ -f, позволяет вести непрерывное наблюдение за добавляемыми строками в файл.

Пример 12-11. Мониторинг системного журнала с помощью tail

Многоцелевая поисковая утилита, использующая регулярные выражения. Изначально это была команда в древнем строчном редакторе ed, g/re/p, что означает — global — regular expression — print .

Поиск участков текста в файле(ах), соответствующих шаблону pattern, где pattern может быть как обычной строкой, так и регулярным выражением.

Если файл(ы) для поиска не задан, то команда grep работает как фильтр для устройства stdout, например в конвейере.

-i — выполняется поиск без учета регистра символов.

-w — поиск совпадений целого слова.

-l — вывод только имен файлов, в которых найдены участки, совпадающие с заданным образцом/шаблоном, без вывода совпадающих строк.

-r — (рекурсивный поиск) поиск выполняется в текущем каталоге и всех вложенных подкаталогах.

The -n option lists the matching lines, together with line numbers.

-v (или —invert-match) — выводит только строки, не содержащие совпадений.

-c ( —count) — выводит количество совпадений без вывода самих совпадений.

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

Для того, чтобы заставить grep выводить имя файла, когда поиск производится по одному-единственному файлу, достаточно указать устройство /dev/null в качестве второго файла.

Если совпадение было найдено, то grep возвращает код завершения — 0, это может оказаться полезным при выполнении поиска в условных операторах ( в таких случаях особый интерес может представлять ключ -q, который подавляет вывод).

Пример 29-6 — пример поиска заданного образца в системном журнале, с помощью grep.

Пример 12-12. Сценарий-эмулятор «grep»

egrep — то же самое, что и grep -E. Эта команда использует несколько отличающийся, расширенный набор регулярных выражений, что позволяет выполнять поиск более гибко.

fgrep — то же самое, что и grep -F. Эта команда выполняет поиск строк символов (не регулярных выражений), что несколько увеличивает скорость поиска.

Утилита agrep имеет более широкие возможности поиска приблизительных совпадений. Образец поиска может отличаться от найденной строки на указанное число символов.

Для поиска по сжатым файлам следует использовать утилиты zgrep, zegrep или zfgrep. Они с успехом могут использоваться и для не сжатых файлов, но в этом случае они уступают в скорости обычным grep, egrep и fgrep. Они очень удобны при выполнении поиска по смешенному набору файлов — когда одни файлы сжаты, а другие нет.

Для поиска по bzip-файлам используйте bzgrep.

Команда look очень похожа на grep, и предназначена для поиска по «словарям» — отсортированным файлам. По-умолчанию, поиск выполняется в файле /usr/dict/words, но может быть указан и другой словарь.

Пример 12-13. Поиск слов в словаре

Скриптовые языки, специально разработанные для анализа текстовых данных.

Неинтерактивный «потоковый редактор» . Широко используется в сценариях на языке командной оболочки.

Утилита контекстного поиска и преобразования текста, замечательный инструмент для извлечения и/или обработки полей (колонок) в структурированных текстовых файлах. Синтаксис awk напоминает язык C.

wc — «word count» , счетчик слов в файле или в потоке:

wc -w подсчитывает только слова.

wc -l подсчитывает только строки.

wc -c подсчитывает только символы.

wc -L возвращает длину наибольшей строки.

Подсчет количества .txt -файлов в текущем каталоге с помощью wc:

Подсчет общего размера файлов, чьи имена начинаются с символов, в диапазоне d — h

От переводчика: в случае, если у вас локаль отлична от «C», то вышеприведенная команда может не дать результата, поскольку wc вернет не слово «total», в конце вывода, а «итого». Тогда можно попробовать несколько измененный вариант:

Использование wc для подсчета количества вхождений слова «Linux» в основной исходный файл с текстом этого руководства.

Отдельные команды располагают функциональностью wc в виде своих ключей.

Замена одних символов на другие.

В отдельных случаях символы необходимо заключать в кавычки и/или квадратные скобки. Кавычки предотвращают интерпретацию специальных символов командной оболочкой. Квадратные скобки должны заключаться в кавычки.

Команда tr «A-Z» «*» tr A-Z \* filename на звездочки (вывод производится на stdout). В некоторых системах этот вариант может оказаться неработоспособным, тогда попробуйте tr A-Z ‘[**]’.

Ключ -d удаляет символы из заданного диапазона.

Ключ —squeeze-repeats ( -s) удалит все повторяющиеся последовательности символов. Может использоваться для удаления лишних пробельных символов.

Ключ -c «complement» заменит символы в соответствии с шаблоном. Этот ключ воздействует только на те символы, которые НЕ соответствуют заданному шаблону.

Обратите внимание: команда tr корректно распознает символьные классы POSIX. [1]

Пример 12-14. toupper: Преобразование символов в верхний регистр.

Пример 12-15. lowercase: Изменение имен всех файлов в текущем каталоге в нижний регистр.

Пример 12-16. du: Преобразование текстового файла из формата DOS в формат UNIX.

Пример 12-17. rot13: Сверхслабое шифрование по алгоритму rot13.

Пример 12-18. Более «сложный» шифр

Различные версии tr

Утилита tr имеет две, исторически сложившиеся, версии. BSD-версия не использует квадратные скобки ( tr a-z A-Z), в то время как SysV-версия использует их ( tr ‘[a-z]’ ‘[A-Z]’). GNU-версия утилиты tr напоминает версию BSD, но диапазоны символов обязательно должны заключаться в квадратные скобки.

Выравнивает текст по ширине, разрывая, если это необходимо, слова. Особый интерес представляет ключ -s, который производит перенос строк по пробелам, стараясь не разрывать слова. (см. Пример 12-19 и Пример A-2).

Очень простая утилита форматирования текста, чаще всего используемая как фильтр в конвейерах для того, чтобы выполнить «перенос» длинных строк текста.

Пример 12-19. Отформатированный список файлов.

Очень мощной альтернативой утилите fmt, является утилита par (автор Kamil Toman), которую вы сможете найти на http://www.cs.berkeley.edu/

Эта утилита с обманчивым названием удаляет из входного потока символы обратной подачи бумаги (код ESC 7). Она так же пытается заменить пробелы на табуляции. Основная область применения утилиты col — фильтрация вывода отдельных утилит обработки текста, таких как groff и tbl.

Форматирование по столбцам. Эта утилита преобразует текст, например какой либо список, в табличное, более «удобочитаемое» , представление, вставляя символы табуляции по мере необходимости.

Пример 12-20. Пример форматирования списка файлов в каталоге

Утилита удаления колонок. Удаляет колонки (столбцы) сиволов из файла и выводит результат на stdout. colrm 2 4 filename.

Если файл содержит символы табуляции или непечатаемые символы, то результат может получиться самым неожиданным. В таких случаях, как правило, утилиту colrm, в конвейере, окружают командами expand и unexpand.

Нумерует строки в файле. nl filename — выведет файл filename на stdout, и в начале каждой строки вставит ее порядковый номер, счет начинается с первой непустой строки. Если файл не указывается, то принимается ввод со stdin.

Вывод команды nl очень напоминает cat -n, однако, по-умолчанию nl не нумерует пустые строки.

Пример 12-21. nl: Самонумерующийся сценарий.

Подготовка файла к печати. Утилита производит разбивку файла на страницы, приводя его в вид пригодный для печати или для вывода на экран. Разнообразные ключи позволяют выполнять различные манипуляции над строками и колонками, соединять строки, устанавливать поля, нумеровать строки, добавлять колонтитулы и многое, многое другое. Утилита pr соединяет в себе функциональность таких команд, как nl, paste, fold, column и expand.

pr -o 5 —width=65 fileZZZ | more — выдаст хорошо оформленное и разбитое на страницы содержимое файла fileZZZ.

Хочу особо отметить ключ -d, который выводит строки с двойным интервалом (тот же эффект, что и sed -G).

GNU утилита, предназначена для нужд локализации и перевода сообщений программ, выводимых на экран, на язык пользователя. Не смотря на то, что это актуально, прежде всего, для программ на языке C, тем не менее gettext с успехом может использоваться в сценариях командной оболочки для тех же целей. См. info page.

Утилита преобразования текста из одной кодировки в другую. В основном используется для нужд локализации.

Может рассматриваться как разновилность утилиты iconv, описанной выше. Универсальная утилита для преобразования текстовой информации в различные кодировки.

TeX и Postscript — языки разметки текста, используемые для подготовки текста к печати или выводу на экран.

TeX — это сложная система подготовки к печати, разработанная Дональдом Кнутом (Donald Knuth). Эту утилиту удобнее использовать внутри сценария, чем в командной строке, поскольку в сценарии проще один раз записать все необходимые параметры, передаваемые утилите, для получения необходимого результата.

Ghostscript ( gs) — это GPL-версия интерпретатора Postscript.

groff — это еще один язык разметки текста и форматированного вывода. Является расширенной GNU-версией пакета roff/troff в UNIX-системах.

tbl — утилита обработки таблиц, должна рассматриваться как составная часть groff, так как ее задачей является преобразование таблиц в команды groff.

eqn — утилита преобразования математических выражений в команды groff.

lex — утилита лексического разбора текста. В Linux-системах заменена на свободно распространяемую утилиту flex.

yacc — утилита для создания синтаксических анализаторов, на основе набора грамматик, задаваемых разработчиком. В Linux-системах, эта утилита заменена на свободно распространяемую утилиту bison.

Примечания

Это верно только для GNU-версии команды tr, поведение этой команды, в коммерческих UNIX-системах, может несколько отличаться.

Источник

Читайте также:  Hornet для mac os
Оцените статью