Меню Рубрики

Команда sed linux примеры

Команда sed в Linux

Операционная система Linux для упрощения ее эксплуатации поддерживает множество специализированных команд. Утилита «sed» — это специфический редактор, позволяющий работать с текстом путем его замены. С помощью данной команды можно редактировать различные файлы без их открытия.

Специальный редактор дает возможность найти, вставить, заменить или удалить определенные фрагменты в файле. Чтобы команда «sed» работала значительно быстрее, потребуется предварительно прописать данные и опции.

Синтаксис

Синтаксис данной утилиты не отличается сложностью. Он представлен в виде:

Первоначально необходимо изучить основные параметры, которые поддерживает команда:

  • «-n» — дает возможность не выводить содержимое, присутствующее в буфере шаблона после каждой итерации.
  • «-e» — позволяет выполнить команды, которые необходимы для редактирования текста.
  • «-f» — дает возможность прочесть команды, которые были использованы при изменении файла.
  • «-l». Опция позволяет указать требуемую длину строки.
  • «-r». Опция применяется для включения поддержки синтаксиса расширенного типа, распространяющегося на активно используемые выражения.
  • «-i». Функция предназначена для создания копии файла (в резерве) перед тем, как он будет отредактирован.
  • «-s». Опция позволяет изучить несколько файлов единовременно. Они будут просмотрены не как длинные потоки, а как отдельные.

Чтобы выполнить несколько действий, используется аргумент «-e».

sed -e [команды] (файл)

Первоначально кажется, что данная утилита очень сложная. На самом деле это не так, ей сможет пользоваться даже новичок в сфере программирования.

Стоит отметить, что данная утилита имеет два отдельно обособленных буфера – это основной и вспомогательный буфер (активного и пассивного плана). Первоначально они абсолютно пусты. Специальная программа передает предварительно определенные условия для всех строк передаваемого файла.

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

Далее выполняются команды, которые были переданы пользователем в параметрах. За каждой определенной командой закрепляется адрес. Он используется в качестве своеобразного условия. Команда пройдет лишь в том случае, если данное условие будет соблюдено.

После выполнения всех предписанных команд, содержимое буфера шаблона попадает в классический поток вывода. Это происходит в том случае, если предварительно не была указана функция «-n», которая ограничивает вывод содержимого.

Когда символ перевода изначально был удален, он добавляется обратно. Только после этого запускается следующая интерпретация, подразумевающая обработку новой строки.

Когда пользователь не планирует использование специальных команд, после завершения первой интерпретации все содержимое основного буфера будет удалено. Стоит отметить, что содержимое, которое относится к первоначально обработанной строке, сохраняется во вспомогательном буфере. Его применяют в дальнейшем при осуществлении задач.

Особенности адресов, предающихся утилите «sed»

Все команды получают свой адрес. Именно он указывает на строки, для которых выполняется команда:

  • «номер». В данном случае прописывается номер определенной строки, где в последующем будет выполняться команда.
  • «первая

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

  • «$». Обрабатывается последняя строка, которая относится к выбранному вами файлу.
  • «/часто используемое_выражение/». Здесь используется любая строка, подходящая по регулярному выражению. Оно не должно зависеть от особенностей регистра.
  • «номер, номер». Обработка начинается с начала первой строки, а заканчивается концом второй строки.
  • «номер,/регулярное_выражение/». Обработка начинается с первоначальной строки, заканчивается в той, которая соответствует информации в часто используемых фразах.
  • «номер+количество». Обработка начинается с верхней строки, длится до той поры, пока не будет исчерпано предварительно указанное число строк.
  • «номер

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

    Когда пользователь не желает задавать определенный адрес для программы «sed», она распространяется на все строки в файле. Если передается один адрес, команда выполняется до той строки, которая расположена по указанному адресу.

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

    Регулярные выражения

    У пользователя есть возможность применить такие же часто используемые выражения, как и в иных наиболее распространенных языках программирования. Стоит рассмотреть ключевой список операторов, поддерживаемых программой «sed»:

    • Различные символы и их количество (*).
    • Более одного символа (\+).
    • Один символ или его отсутствие (\?).
    • Любые символы, их количество должно быть равно i (\).
    • Любые символы, их количество должно находиться в пределах от I до j (\).
    • Любые символы, их количество должно быть больше i (\).

    Команды

    Если пользователь планирует часто эксплуатировать «sed», он должен знать основной перечень команд, применяемых при редактировании. Стоит рассмотреть основные, которые применяются чаще всего:

    • «q». Завершается действие сценария.
    • «d». Удаляется первоначальный основной буфер шаблона, запускается следующая интерпретация цикла.
    • «p». Выводится содержимое основного буфера.
    • «n». Выводится состав основного буфера шаблона. Есть возможность переместить в него последующую строку.
    • «s/что_прописать/на_что_поменять/опция». Заменяются символы, имеется возможность ограничить вывод с учетом часто используемых фраз.
    • «y/символ/символ». Заменяются символы, присутствующие спереди строки, на те данные, которые имеются во 2 части.
    • «w». Записывается содержимое основного буфера шаблона непосредственно в обрабатываемый файл.
    • «N». Добавляется перевод строк в основной буфер.
    • «D». Удаление основного буфера шаблона, начало интерации следующего цикла, когда в шаблоне не содержится новая строка.
    • «g». Замена содержимого основного буфера на состав вспомогательного .
    • «G». Добавление новых строчек в состав основного буфера. Сюда же добавляется состав вспомогательного буфера.

    Стоит отметить, что утилите «sed» можно придать одновременно определенное количество команд. Для осуществления такой задачи потребуется разделить их точкой с запятой.

    Примеры

    Для первого примера, заменим каждое вхождение «пример» на «тест» в файле «dokument».
    sed ‘s/пример/тест/g’ dokument

    ВАЖНО! В операционной системе Линукс очень важен регистр имен. Как видно из скриншота «Пример» и «пример» — это разные слова.

    Дополним команду таким образом, чтобы менялось не только слово «пример», но и это же слово написанное с большой буквы. Для этого будем использовать специальные символы «\|».

    sed ‘s/пример\|Пример/тест/g’ dokument

    Заменим два фрагмента текста: «документ» на «файл»; «как» на «не». Так как у нас несколько фрагментов текстов, будем использовать ключ «-е».
    sed -e ‘s/документ/файл/; s/как/не/’ dokument

    Теперь сохраним все изменения в файл. Для это будем использовать ключ «-i» редактирования файла на месте.

    sed -ie ‘s/документ/файл/; s/как/не/’ dokument

    Удалим все пробелы в начале каждой строки слева.
    sed ‘s/^[ \t]*//’ file


    Теперь удалим все пропуски в конце строки.
    sed ‘s/[ \t]*$//’ file

    Удаление последней строки.

    Добавление восьми пробелов в новый файл слева от текстовой информации. Будем использовать перенаправление вывода «>»

    sed ‘s/ / /’ file > newfile

    Выведение строк c 3 по 5 файла «newfile».

    Выведение всего файла «newfile», кроме строк 3-5.

    Удалим все пустые строки и сохраним эти изменения в файле.

    Утилита «sed» является весьма гибким и максимально удобным инструментом, позволяющим сделать с текстом многие вещи. Такая команда отличается сложностью в усвоении, но дает решить множество задач.

    Источник

    Команда sed Linux

    Команда sed — это потоковый редактор текста, работающий по принципу замены. Его можно использовать для поиска, вставки, замены и удаления фрагментов в файле. С помощью этой утилиты вы можете редактировать файлы не открывая их. Будет намного быстрее если вы напишите что и на что надо заменить, чем вы будете открывать редактор vi, искать нужную строку и вручную всё заменять.

    В этой статье мы рассмотрим основы использования команды sed linux, её синтаксис, а также синтаксис регулярных выражений, который используется непосредственно для поиска и замены в файлах.

    Команда sed в Linux

    Сначала рассмотрим синтаксис команды:

    $ sed опции -e команды файл

    А вот её основные опции:

    • -n, —quiet — не выводить содержимое буфера шаблона в конце каждой итерации;
    • -e — команды, которые надо выполнить для редактирования;
    • -f — прочитать команды редактирования из файла;
    • -i — сделать резервную копию файла перед редактированием;
    • -l — указать свою длину строки;
    • -r — включить поддержку расширенного синтаксиса регулярных выражений;
    • -s — если передано несколько файлов, рассматривать их как отдельные потоки, а не как один длинный.

    Я понимаю, что сейчас всё очень сложно, но к концу статьи всё прояснится.

    1. Как работает sed

    Теперь нужно понять как работает команда sed. У утилиты есть два буфера, это активный буфер шаблона и дополнительный буфер. Оба изначально пусты. Программа выполняет заданные условия для каждой строки в переданном ей файле.

    sed читает одну строку, удаляет из неё все завершающие символы и символы новой строки и помещает её в буфер шаблона. Затем выполняются переданные в параметрах команды, с каждой командой может быть связан адрес, это своего рода условие и команда выполняется только если подходит условие.

    Когда всё команды будут выполнены и не указана опция -n, содержимое буфера шаблона выводится в стандартный поток вывода перед этим добавляется обратно символ перевода строки. если он был удален. Затем запускается новая итерация цикла для следующей строки.

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

    2. Адреса sed

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

    • номер — позволяет указать номер строки, в которой надо выполнять команду;
    • первая

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

  • $ — последняя строка в файле;
  • /регулярное_выражение/ — любая строка, которая подходит по регулярному выражению. Модификатор l указывает, что регулярное выражение должно быть не чувствительным к регистру;
  • номер, номер — начиная от строки из первой части и заканчивая строкой из второй части;
  • номер, /регулярное_выражение/ — начиная от сроки из первой части и до сроки, которая будет соответствовать регулярному выражению;
  • номер, +количество — начиная от номера строки указанного в первой части и еще плюс количество строк после него;
  • номер,

    число — начиная от строки номер и до строки номер которой будет кратный числу.

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

    3. Синтаксис регулярных выражений

    Вы можете использовать такие же регулярные выражения, как и для Bash и популярных языков программирования. Вот основные операторы, которые поддерживают регулярные выражения sed Linux:

    • * — любой символ, любое количество;
    • \+ — как звездочка, только один символ или больше;
    • \? — нет или один символ;
    • \ — любой символ в количестве i;
    • \ — любой символ в количестве от i до j;
    • \ — любой символ в количестве от i и больше.

    4. Команды sed

    Если вы хотите пользоваться sed, вам нужно знать команды редактирования. Рассмотрим самые часто применяемые из них:

    • # — комментарий, не выполняется;
    • q — завершает работу сценария;
    • d — удаляет буфер шаблона и запускает следующую итерацию цикла;
    • p — вывести содержимое буфера шаблона;
    • n — вывести содержимое буфера шаблона и прочитать в него следующую строку;
    • s/что_заменять/на_что_заменять/опции — замена символов, поддерживаются регулярные выражения;
    • y/символы/символы — позволяет заменить символы из первой части на соответствующие символы из второй части;
    • w — записать содержимое буфера шаблона в файл;
    • N — добавить перевод строки к буферу шаблона;
    • D — если буфер шаблона не содержит новую строку, удалить его содержимое и начать новую итерацию цикла, иначе удалить содержимое буфера до символа перевода строки и начать новую итерацию цикла с тем, что останется;
    • g — заменить содержимое буфера шаблона, содержимым дополнительного буфера;
    • G — добавить новую строку к содержимому буфера шаблона, затем добавить туда же содержимое дополнительного буфера.

    Утилите можно передать несколько команд, для этого их надо разделить точкой с запятой или использовать две опции -e. Теперь вы знаете всё необходимое и можно переходить к примерам.

    Примеры использования sed

    Теперь рассмотрим примеры sed Linux, чтобы у вас сложилась целостная картина об этой утилите. Давайте сначала выведем из файла стройки с пятой по десятую. Для этого воспользуемся командой -p. Мы используем опцию -n чтобы не выводить содержимое буфера шаблона на каждой итерации, а выводим только то, что нам надо. Если команда одна, то опцию -e можно опустить и писать без неё:

    sed -n ‘5,10p’ /etc/group

    Или можно вывести весь файл, кроме строк с первой по двадцатую:

    Здесь наоборот, опцию -n не указываем, чтобы выводилось всё, а с помощью команды d очищаем ненужное. Дальше рассмотрим замену в sed. Это самая частая функция, которая применяется вместе с этой утилитой. Заменим вхождения слова root на losst в том же файле и выведем всё в стандартный вывод:

    sed ‘s/root/losst/g’ /etc/group

    Флаг g заменяет все вхождения, также можно использовать флаг i, чтобы сделать регулярное выражение sed не зависимым от регистра. Для команд можно задавать адреса. Например, давайте выполним замену 0 на 1000, но только в строках с первой по десятую:

    sed ‘1,10 s/0/1000/g’ /etc/group

    Переходим ещё ближе к регулярным выражением, удалим все пустые строки или строи с комментариями из конфига Apache:

    sed ‘/^#\|^$\| *#/d’ /etc/apache2/apache2.conf

    Под это регулярное выражение (адрес) подпадают все строки, которые начинаются с #, пустые, или начинаются с пробела, а за ним идет решетка. Регулярные выражения можно использовать и при замене. Например, заменим все вхождения p в начале строки на losst_p:

    sed ‘s/[$p*]/losst_p/g’ /etc/group

    Если вам надо записать результат замены в обратно в файл можно использовать стандартный оператор перенаправления вывода > или утилиту tee. Например:

    sed ‘/^#\|^$\| *#/d’ /etc/apache2/apache2.conf | sudo tee /etc/apache2/apache2.conf

    Также можно использовать опцию -i, тогда утилита не будет выполнять изменения в переданном ей файле:

    sudo sed -i ‘/^#\|^$\| *#/d’ /etc/apache2/apache2.conf

    Если надо сохранить оригинальный файл, достаточно передать опции -i в параметре расширение для файла резервной копии.

    Выводы

    Из этой статьи вы узнали что представляет из себя команда sed Linux. Как видите, это очень гибкий инструмент, который позволяет делать с текстом очень многое. Он сложный в освоении, но с помощью него очень удобно решать многие задачи редактирования конфигурационных файлов или фильтрации вывода.

    Источник

  • Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Команда pwd в linux
  • Команда ping в linux параметры
  • Команда mount в linux
  • Команда mkfs в linux
  • Команда man в linux