- Linux sed перевод строки
- Bash-скрипты, часть 7: sed и обработка текстов
- Основы работы с sed
- Выполнение наборов команд при вызове sed
- Чтение команд из файла
- Флаги команды замены
- Символы-разделители
- Выбор фрагментов текста для обработки
- Удаление строк
- Вставка текста в поток
- Замена строк
- Замена символов
- Вывод номеров строк
- Чтение данных для вставки из файла
- Пример
- Итоги
Linux sed перевод строки
Здравствуйте!
Подскажите, пожалуйста, как sed’ом разбить строку на абзацы.
скажем заменить все сиволы ‘ на перевод строки.
Спасибо.
Оглавление |
|
Сообщения по теме | [Сортировка по времени | RSS] |
1. «sed и перевод строки» | |
Сообщение от L0n3R4ng3r | |
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору |
2. «sed и перевод строки» | |
Сообщение от allez | |
| |
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору |
3. «sed и перевод строки» | |
Сообщение от L0n3R4ng3r | |
или так просто это под солярку не катит:( >echo «sdf2sfd2sd2» | sed -e ‘s/2/\n/g’ sdfnsfdnsdn SunOS 5.9 Generic_118558-17 sun4u sparc SUNW,Sun-Fire-V490 | |
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору |
4. «sed и перевод строки» | |
Сообщение от Максим | |
Вариант с tr супер, блин забываешь истинные unix-овые команды. | |
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору |
5. «sed и перевод строки» | |
Сообщение от allez | |
Вот поэтому и считается хорошим тоном сообщать, какая ОС используется. 😉 | |
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору |
6 . «sed и перевод строки» | |
Сообщение от phpcoder | |
[. ] В таком случае нужно экранировать символ новой строки: echo «sdf2sfd2sd2» | sed -e ‘s/2/\ Т.е. в первой строке команды после обратного слэша нужно тут же нажать Enter и продолжить вводить команду дальше, на следующей строчке. Источник Bash-скрипты, часть 7: sed и обработка текстовВ прошлый раз мы говорили о функциях в bash-скриптах, в частности, о том, как вызывать их из командной строки. Наша сегодняшняя тема — весьма полезный инструмент для обработки строковых данных — утилита Linux, которая называется sed. Её часто используют для работы с текстами, имеющими вид лог-файлов, конфигурационных и других файлов.
Если вы, в bash-скриптах, каким-то образом обрабатываете данные, вам не помешает знакомство с инструментами sed и gawk. Тут мы сосредоточимся на sed и на работе с текстами, так как это — очень важный шаг в нашем путешествии по бескрайним просторам разработки bash-скриптов. Сейчас мы разберём основы работы с sed, а так же рассмотрим более трёх десятков примеров использования этого инструмента. Основы работы с sedУтилиту sed называют потоковым текстовым редактором. В интерактивных текстовых редакторах, наподобие nano, с текстами работают, используя клавиатуру, редактируя файлы, добавляя, удаляя или изменяя тексты. Sed позволяет редактировать потоки данных, основываясь на заданных разработчиком наборах правил. Вот как выглядит схема вызова этой команды: По умолчанию sed применяет указанные при вызове правила, выраженные в виде набора команд, к STDIN . Это позволяет передавать данные непосредственно sed. Вот что получится при выполнении этой команды. Простой пример вызова sed В данном случае sed заменяет слово «test» в строке, переданной для обработки, словами «another test». Для оформления правила обработки текста, заключённого в кавычки, используются прямые слэши. В нашем случае применена команда вида s/pattern1/pattern2/ . Буква «s» — это сокращение слова «substitute», то есть — перед нами команда замены. Sed, выполняя эту команду, просмотрит переданный текст и заменит найденные в нём фрагменты (о том — какие именно, поговорим ниже), соответствующие pattern1 , на pattern2 . Выше приведён примитивный пример использования sed, нужный для того, чтобы ввести вас в курс дела. На самом деле, sed можно применять в гораздо более сложных сценариях обработки текстов, например — для работы с файлами. Ниже показан файл, в котором содержится фрагмент текста, и результаты его обработки такой командой: Текстовый файл и результаты его обработки Здесь применён тот же подход, который мы использовали выше, но теперь sed обрабатывает текст, хранящийся в файле. При этом, если файл достаточно велик, можно заметить, что sed обрабатывает данные порциями и выводит то, что обработано, на экран, не дожидаясь обработки всего файла. Sed не меняет данные в обрабатываемом файле. Редактор читает файл, обрабатывает прочитанное, и отправляет то, что получилось, в STDOUT . Для того, чтобы убедиться в том, что исходный файл не изменился, достаточно, после того, как он был передан sed, открыть его. При необходимости вывод sed можно перенаправить в файл, возможно — перезаписать старый файл. Если вы знакомы с одним из предыдущих материалов этой серии, где речь идёт о перенаправлении потоков ввода и вывода, вы вполне сможете это сделать. Выполнение наборов команд при вызове sedДля выполнения нескольких действий с данными, используйте ключ -e при вызове sed. Например, вот как организовать замену двух фрагментов текста: Использование ключа -e при вызове sed К каждой строке текста из файла применяются обе команды. Их нужно разделить точкой с запятой, при этом между окончанием команды и точкой с запятой не должно быть пробела. Вот что получится после того, как команда, представленная в таком виде, будет выполнена. Другой способ работы с sed Чтение команд из файлаЕсли имеется множество команд sed, с помощью которых надо обработать текст, обычно удобнее всего предварительно записать их в файл. Для того, чтобы указать sed файл, содержащий команды, используют ключ -f : Вот содержимое файла mycommands : Вызовем sed, передав редактору файл с командами и файл для обработки: Результат при вызове такой команды аналогичен тому, который получался в предыдущих примерах. Использование файла с командами при вызове sed Флаги команды заменыВнимательно посмотрите на следующий пример. Вот что содержится в файле, и что будет получено после его обработки sed. Исходный файл и результаты его обработки Команда замены нормально обрабатывает файл, состоящий из нескольких строк, но заменяются только первые вхождения искомого фрагмента текста в каждой строке. Для того, чтобы заменить все вхождения шаблона, нужно использовать соответствующий флаг. Схема записи команды замены при использовании флагов выглядит так: Выполнение этой команды можно модифицировать несколькими способами.
Рассмотрим использование первого варианта команды замены, с указанием позиции заменяемого вхождения искомого фрагмента: Вызов команды замены с указанием позиции заменяемого фрагмента Тут мы указали, в качестве флага замены, число 2. Это привело к тому, что было заменено лишь второе вхождение искомого шаблона в каждой строке. Теперь опробуем флаг глобальной замены — g : Как видно из результатов вывода, такая команда заменила все вхождения шаблона в тексте. Флаг команды замены p позволяет выводить строки, в которых найдены совпадения, при этом ключ -n , указанный при вызове sed, подавляет обычный вывод: Как результат, при запуске sed в такой конфигурации на экран выводятся лишь строки (в нашем случае — одна строка), в которых найден заданный фрагмент текста. Использование флага команды замены p Воспользуемся флагом w , который позволяет сохранить результаты обработки текста в файл: Сохранение результатов обработки текста в файл Хорошо видно, что в ходе работы команды данные выводятся в STDOUT, при этом обработанные строки записываются в файл, имя которого указано после w . Символы-разделителиПредставьте, что нужно заменить /bin/bash на /bin/csh в файле /etc/passwd . Задача не такая уж и сложная: Однако, выглядит всё это не очень-то хорошо. Всё дело в том, что так как прямые слэши используются в роли символов-разделителей, такие же символы в передаваемых sed строках приходится экранировать. В результате страдает читаемость команды. К счастью, sed позволяет нам самостоятельно задавать символы-разделители для использования их в команде замены. Разделителем считается первый символ, который будет встречен после s : В данном случае в качестве разделителя использован восклицательный знак, в результате код легче читать и он выглядит куда опрятнее, чем прежде. Выбор фрагментов текста для обработкиДо сих пор мы вызывали sed для обработки всего переданного редактору потока данных. В некоторых случаях с помощью sed надо обработать лишь какую-то часть текста — некую конкретную строку или группу строк. Для достижения такой цели можно воспользоваться двумя подходами:
Рассмотрим первый подход. Тут допустимо два варианта. Первый, рассмотренный ниже, предусматривает указание номера одной строки, которую нужно обработать: Обработка только одной строки, номер который задан при вызове sed Второй вариант — диапазон строк: Обработка диапазона строк Кроме того, можно вызвать команду замены так, чтобы файл был обработан начиная с некоей строки и до конца: Обработка файла начиная со второй строки и до конца Для того, чтобы обрабатывать с помощью команды замены только строки, соответствующие заданному фильтру, команду надо вызвать так: По аналогии с тем, что было рассмотрено выше, шаблон передаётся перед именем команды s . Обработка строк, соответствующих фильтру Тут мы использовали очень простой фильтр. Для того, чтобы в полной мере раскрыть возможности данного подхода, можно воспользоваться регулярными выражениями. О них мы поговорим в одном из следующих материалов этой серии. Удаление строкУтилита sed годится не только для замены одних последовательностей символов в строках на другие. С её помощью, а именно, используя команду d , можно удалять строки из текстового потока. Вызов команды выглядит так: Мы хотим, чтобы из текста была удалена третья строка. Обратите внимание на то, что речь не идёт о файле. Файл останется неизменным, удаление отразится лишь на выводе, который сформирует sed. Удаление третьей строки Если при вызове команды d не указать номер удаляемой строки, удалены будут все строки потока. Вот как применить команду d к диапазону строк: Удаление диапазона строк А вот как удалить строки, начиная с заданной — и до конца файла: Удаление строк до конца файла Строки можно удалять и по шаблону: Удаление строк по шаблону При вызове d можно указывать пару шаблонов — будут удалены строки, в которых встретится шаблон, и те строки, которые находятся между ними: Удаление диапазона строк с использованием шаблонов Вставка текста в потокС помощью sed можно вставлять данные в текстовый поток, используя команды i и a :
Рассмотрим пример использования команды i : Теперь взглянем на команду a : Как видно, эти команды добавляют текст до или после данных из потока. Что если надо добавить строку где-нибудь посередине? Тут нам поможет указание номера опорной строки в потоке, или шаблона. Учтите, что адресация строк в виде диапазона тут не подойдёт. Вызовем команду i , указав номер строки, перед которой надо вставить новую строку: Команда i с указанием номера опорной строки Проделаем то же самое с командой a : Команда a с указанием номера опорной строки Обратите внимание на разницу в работе команд i и a . Первая вставляет новую строку до указанной, вторая — после. Замена строкКоманда c позволяет изменить содержимое целой строки текста в потоке данных. При её вызове нужно указать номер строки, вместо которой в поток надо добавить новые данные: Замена строки целиком Если воспользоваться при вызове команды шаблоном в виде обычного текста или регулярного выражения, заменены будут все соответствующие шаблону строки: Замена строк по шаблону Замена символовКоманда y работает с отдельными символами, заменяя их в соответствии с переданными ей при вызове данными: Используя эту команду, нужно учесть, что она применяется ко всему текстовому потоку, ограничить её конкретными вхождениями символов нельзя. Вывод номеров строкЕсли вызвать sed, использовав команду = , утилита выведет номера строк в потоке данных: Вывод номеров строк Потоковый редактор вывел номера строк перед их содержимым. Если передать этой команде шаблон и воспользоваться ключом sed -n , выведены будут только номера строк, соответствующих шаблону: Вывод номеров строк, соответствующих шаблону Чтение данных для вставки из файлаВыше мы рассматривали приёмы вставки данных в поток, указывая то, что надо вставить, прямо при вызове sed. В качестве источника данных можно воспользоваться и файлом. Для этого служит команда r , которая позволяет вставлять в поток данные из указанного файла. При её вызове можно указать номер строки, после которой надо вставить содержимое файла, или шаблон. Вставка в поток содержимого файла Тут содержимое файла newfile было вставлено после третьей строки файла myfile . Вот что произойдёт, если применить при вызове команды r шаблон: Использование шаблона при вызове команды r Содержимое файла будет вставлено после каждой строки, соответствующей шаблону. ПримерПредставим себе такую задачу. Есть файл, в котором имеется некая последовательность символов, сама по себе бессмысленная, которую надо заменить на данные, взятые из другого файла. А именно, пусть это будет файл newfile , в котором роль указателя места заполнения играет последовательность символов DATA . Данные, которые нужно подставить вместо DATA , хранятся в файле data . Решить эту задачу можно, воспользовавшись командами r и d потокового редактора sed: Замена указателя места заполнения на реальные данные Как видите, вместо заполнителя DATA sed добавил в выходной поток две строки из файла data . ИтогиСегодня мы рассмотрели основы работы с потоковым редактором sed. На самом деле, sed — это огромнейшая тема. Его изучение вполне можно сравнить с изучением нового языка программирования, однако, поняв основы, вы сможете освоить sed на любом необходимом вам уровне. В результате ваши возможности по обработке с его помощью текстов будет ограничивать лишь воображение. На сегодня это всё. В следующий раз поговорим о языке обработки данных awk. Уважаемые читатели! А вы пользуетесь sed в повседневной работе? Если да — поделитесь пожалуйста опытом. Источник |