Как заменить все после шаблона с помощью команды `sed`

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

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

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

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

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

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

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

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

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

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

Диапазон поиска

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

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

Например, чтобы заменить все вхождения ‘foo’ на ‘bar’ во всех строках, начиная со строки 3 по строку 10, вы должны использовать:

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

Точка символ указывает на текущую строку и — доллар знак последней строки. Чтобы заменить ‘foo’ во всех строках, начиная с текущей и заканчивая последней:

Спецификатор строки также может быть установлен с помощью символа «+» или «-», за которым следует число, которое добавляется или вычитается из номера предыдущей строки. Если число после символа опущено, по умолчанию используется 1.

Например, чтобы заменить каждое ‘foo’ на ‘bar’, начиная с текущей строки и четырех следующих строк, введите:

Поиск без учета регистра

По умолчанию чувствителен к регистру. Это означает, что символы верхнего и нижнего регистра рассматриваются как разные.

Чтобы игнорировать регистр при поиске, вызовите с параметром (или ).

Например, при поиске без какой-либо опции следующая команда не покажет никаких результатов, т.е. есть совпадающие строки:

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

Указание «Зебра» будет соответствовать «зебре», «ZEbrA» или любой другой комбинации букв верхнего и нижнего регистра для этой строки.

Поиск и замена текста в Nano Editor

Nano editor позволяет выполнить поиск и замену текста. Чтобы найти текст, требуется нажать , а затем введите ключевое слово поиска. Например мы ищем строку “Linux”.


Поиск строки в редакторе

Это приведет вас к первому экземпляру ключевого слова.


Поиск по тексту

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

Чтобы найти и заменить строку в редакторе Nano, нажмите . При этом вам будет предложено ввести ключевое слово поиска. Например мы хотим найти строку “Linux” и заменить ее на “Unix”. После ввода строки нажмите клавишу ENTER


Укажите ключевое слово поиска в Nano

Укажите строку для замены ключевого слова поиска. В этом случае мы предоставили “Unix” в качестве замены.


Строка для замены слова в Nano editor

Затем нажмите ENTER еще раз. Вам будет предложено подтвердить изменения. Нажмите » Y’ для подтверждения, а если передумали, просто нажмите ‘N’.


Подтверждение замены строки в Nano

Слово будет заменено.


Строка заменена в редакторе Nano editor

Linux поиск по содержимому файлов командой find

Своего рода швейцарским ножом в розыске файлов является команда find. Отметим, что она имеет множество опций, которые смогут кардинально изменять механизм поиска. Мы изложим лишь основные принципы, а с остальными способностями ознакомьтесь в справке по команде. Базовый принцип использования find состоит в указании папки поиска и опций. Например, выражение «find ~/ -name *.cpp» осуществит поиск файлов, имеющих продолжение «cpp» по всем каталогам, находящимся в личной директории пользователя.

Значение, указанное после опции -name, задает шаблон соотношения имени файла. Вы можете использовать опцию -type для указания типа файла, где в свойстве значений нужно использовать специальные буквы: d — директория, f — файл, l — символическая ссылка и т. д. Функции -user, -group и -size также довольно полезны. Их значениями являются имя пользователя, имя категории и размер файла в байтах.

С поддержкою опции -exec каждому файлу, предназначенному для установки соответствия, можно добавить случайную обработку. Таким образом, появляется возможность осуществления поиска, как по имени файла, так и по охватываемому. Ниже приводится пример комбинирования команды find и grep за счет использования функции -exec.

А возможно и еще проще

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

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

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

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

Первый набор (это значит abcdefghijklmnopqrstuvwxyz). Второй набор (который содержит pqrstuvwxyzabcdefghijklmn).

tr 'a-z' 'p-za-n'

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

$ echo 'abg' | tr 'ab' 'ef'
efg

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

$ echo '[email protected]' | tr 'A-Za-z' 'N-ZA-Mn-za-m
[email protected]

Общий синтаксис

find <где искать> <опции>

<где искать> — путь к корневому каталогу, откуда начинать поиск. Например, find /home/user — искать в соответствующем каталоге. Для текущего каталога нужно использовать точку «.».

<опции> — набор правил, по которым выполнять поиск.

* по умолчанию, поиск рекурсивный. Для поиска в конкретном каталоге можно использовать опцию maxdepth.

Описание опций

Опция Описание
-name Поиск по имени.
-iname Регистронезависимый поиск по имени.
-type

Тип объекта поиска. Возможные варианты:

  • f — файл;
  • d — каталог;
  • l — ссылка;
  • p — pipe;
  • s — сокет.
-size Размер объекта. Задается в блоках по 512 байт или просто в байтах (с символом «c»).
-mtime Время изменения файла. Указывается в днях.
-mmin Время изменения в минутах.
-atime Время последнего обращения к объекту в днях.
-amin Время последнего обращения в минутах.
-ctime Последнее изменение владельца или прав на объект в днях.
-cmin Последнее изменение владельца или прав в минутах.
-user Поиск по владельцу.
-group По группе.
-perm С определенными правами доступа.
-depth Поиск должен начаться не с корня, а с самого глубоко вложенного каталога.
-maxdepth Максимальная глубина поиска по каталогам. -maxdepth 0 — поиск только в текущем каталоге. По умолчанию, поиск рекурсивный.
-prune Исключение перечисленных каталогов.
-mount Не переходить в другие файловые системы.
-regex По имени с регулярным выражением.
-regextype <тип> Тип регулярного выражения.
-L или -follow Показывает содержимое символьных ссылок (симлинк).
-empty Искать пустые каталоги.
-delete Удалить найденное.
-ls Вывод как ls -dgils
-print Показать найденное.
-print0 Путь к найденным объектам.
-exec <команда> {} \; Выполнить команду над найденным.
-ok Выдать запрос перед выполнением -exec.

Также доступны логические операторы:

Оператор Описание
-a Логическое И. Объединяем несколько критериев поиска.
-o Логическое ИЛИ. Позволяем команде find выполнить поиск на основе одного из критериев поиска.
-not или ! Логическое НЕ. Инвертирует критерий поиска.

Полный набор актуальных опций можно получить командой man find.

Опции программы sed

Программа имеет на удивление мало опций. (Что несколько компенсирует избыток команд, модификаторов и прочих функций). Кроме общеизвестных опций —help (-h) и —version (-V), которые мы рассматривать не будем, их всего три:

Опция -e
—expression=набор_команд

Один из способов выполнения нескольких команд — применение опции -e. Например:

 sed -e 's/a/A/' -e 's/b/B/' имя_файла

Все предыдущие примеры в этой статье не требовали применения опции -e только потому, что содержали одну команду. Мы могли поставить в примерах опцию -e, это ничего бы не изменило.

Опция -f
Если требуется выполнить большое количество команд, то удобнее записать их в файл и применить опцию -f:

 sed -f sedscript имя-файла

Sedscript здесь — имя файла, содержащего команды. Этот файл называется скриптом программы sed (далее просто скрипт). Каждая команда скрипта должна занимать отдельную строку. Например:

 # комментарий - Этот скрипт изменит все строчные гласные буквы на заглавные
 s/a/A/g
 s/e/E/g
 s/i/I/g
 s/o/O/g
 s/u/U/g

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

Опция -n
Программа sed -n не выводит ничего на стандартный выход. Чтобы получить вывод нужно специальное указание. Мы уже познакомились с модификатором /p, при помощи которого можно дать такое указание. Вспомним файл zar.txt:

  $ sed 's/1-9/&/p' zar.txt
  По утрам он делал зарядку.
  Молния - электрический заряд.

Так как совпадений с ОБРАЗЦОМ не найдено (в файле нет цифр), то команда s с модификатором /p и знаком & в качестве ЗАМЕНЫ (напомню, что амперсанд означает сам ОБРАЗЕЦ), работает как команда cat.

Если ОБРАЗЕЦ будет найден в файле, то строки, содержащие ОБРАЗЕЦ, будут удвоены:

 $ sed 's/зарядку/&/p' zar.txt
 По утрам он делал зарядку.
 По утрам он делал зарядку.
 Молния - электрический заряд.

Теперь добавим опцию -n:

 $ sed -n 's/зарядк/&/p' zar.txt
 По утрам он делал зарядку.
 

Теперь наша программа работает как команда grep — возвращает только строки, содержащие ОБРАЗЕЦ.

Основы работы с grep

Поиск строки в файле операционной системы Linux Ubuntu осуществляется посредством специальной утилиты — grep. Она позволяет также отфильтровать вывод информации в консоли. Например, вывести все ошибки из log-файла утилиты ps или найти PID определенного процесса в ее отчете.

Команда grep работает с шаблонами и регулярными выражениями. Кроме того, она применяется с другими командами интерпретатора bash.

Синтаксис команды

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

  1. grep pattern (где options— дополнительные параметры для указания настроек поиска и вывода результата; pattern— шаблон, представляющий строку поиска или регулярное выражение, по которым будет осуществляться поиск; file_name1 file_name2 file_nameN— имя одного или нескольких файлов, в которых производится поиск).
  2. instruction | grep pattern (где instruction — команда интерпретатора bash, options— дополнительные параметры для указания настроек поиска и вывода результата, pattern— шаблон, представляющий строку поиска или регулярное выражение, по которым будет производиться поиск).

Основные опции

  • Отобразить в консоли номер блока перед строкой — -b.
  • Число вхождений шаблона строки — -с.
  • Не выводить имя файла в результатах поиска — -h.
  • Без учета регистра — -i.
  • Отобразить только имена файлов с совпадением строки — -l.
  • Показать номер строки — -n.
  • Игнорировать сообщения об ошибках — -s.
  • Инверсия поиска (отображение всех строк, в которых не найден шаблон) — -v.
  • Слово, окруженное пробелами, — -w.
  • Включить регулярные выражения при поиске — -e.
  • Отобразить вхождение и N строк до и после него — -An и -Bn соответственно.
  • Показать строки до и после вхождения — -Cn.

Поиск подстроки в строке

В окне терминала выводятся все строки, содержащие подстроку. Найденные совпадения подсвечиваются другим цветом.

  • С учетом регистра:
    grep Bourne firstfile.txt
  • Без учета регистра:
    grep -i "Bourne"txt

Вывод нескольких строк

  • Строка с вхождением и две после нее:
    grep -A2 "Bourne"txt
  • Строка с вхождением и три до нее:
    grep -B3 "Bourne"txt
  • Строка, содержащая вхождение, и одну до и после нее:
    grep -C1 "Bourne"txt

Чтение строки из файла с использованием регулярных выражений

Регулярные выражения расширяют возможности поиска и позволяют выполнить разбор строки на отдельные элементы. Они активируются при помощи ключа -e.

  • Вывод строки, в начале которой встречается слово «Фамилия».В регулярных выражения для обозначения начала строки используется специальный символ «^».
    grep "^Фамилия" firstfile.txt

    Чтобы вывести первый символ строки, нужно воспользоваться конструкцией

    grep "^Ф" firstfile.txt
  • Конец строки, заканчивающийся словом «оболочка». Для обозначения конца строки используется мета-символ «$».grep «оболочка$» firstfile.txt Если требуется вывести символ конца строки, то следует применять конструкциюgrep «а.$» firstfile.txt. В этом случае будут выведены все строки, заканчивающиеся на литеру «а».
  • Строки, содержащие числа.
    grep -C1 "Bourne"txt

    Если воспользоваться числовыми интервалами, то можно вывести все строки, в которых встречаются числа:

    grep ""txt

Рекурсивный режим поиска

  • Чтобы найти строку или слово в нескольких файлах, расположенных в одной папке, нужно использовать рекурсивный режим поиска:
    grep -r "оболочка$"
  • Если нет необходимости выводить имена файлов, содержащих искомую строку, то можно воспользоваться ключом-параметром деактивации отображения имен:
    grep -h -r "оболочка$"

Точное вхождение

При поиске союза «и» grep будет выводить все строки, в которых он содержится. Чтобы этого избежать, требуется использовать специальный ключ «w»

grep -w "и" firstfile.txt

Утилита «w» позволяет искать не только одно слово, но и несколько одновременно

grep -w "и | но" firstfile.txt

Количество строк в файле

При помощи grep можно определить число вхождений строки или подстроки в текстовом файле и вывести ее номер.

  • Число вхождений:
    grep -с "Bourne"txt
  • Номера строк с совпадениями:
    grep -n "Bourne"txt

Инверсия

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

grep -v "Unix" firstfile.txt

Вывод только имени файла

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

grep -I "Unix" *.txt

How to Use sed to Find and Replace String in Files

11 Апреля 2020
&vert;

Терминал

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

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

Найти и заменить строку на

Существует несколько версий , с некоторыми функциональными различиями между ними. macOS использует версию BSD, и большинство дистрибутивов Linux поставляются с предварительно установленной GNU по умолчанию. Мы будем использовать версию GNU.

Общая форма поиска и замены текста принимает следующую форму:

  • — По умолчанию записывает свой вывод на стандартный вывод. Эта опция говорит редактировать файлы на месте. Если указано расширение (например, -i.bak), будет создана резервная копия исходного файла.
  • — Команда замены, вероятно, наиболее используемая команда в sed.
  • — разделитель персонажа. Это может быть любой символ, но обычно используется символ косой черты ( ).
  • — Обычная строка или регулярное выражение для поиска.
  • — Строка замены.
  • — Глобальный флаг замены. По умолчанию файл читает построчно и изменяет только первое вхождение строки. Если указан флаг замены, все случаи будут заменены.
  • — Имя файла, для которого вы хотите выполнить команду.

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

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

В демонстрационных целях мы будем использовать следующий файл:

file.txt

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

С глобальным флагом замены заменяет все вхождения шаблона поиска:

Как вы могли заметить, в предыдущем примере подстрока внутри строки также заменяется. Если это нежелательное поведение, используйте выражение word-boundery ( ) на обоих концах строки поиска. Это гарантирует, что отдельные слова не совпадают.

Чтобы сделать сопоставление с шаблоном нечувствительным к регистру, используйте флаг. В приведенном ниже примере мы используем как и флаги:

Если вы хотите найти и заменить строку, содержащую символ-разделитель ( ), вам нужно использовать обратную косую черту ( ), чтобы избежать косой черты. Например , чтобы заменить с вы будете использовать

Более простой и читаемый вариант — использовать другой символ-разделитель. Большинство людей используют вертикальную черту ( ) или двоеточие ( ), но вы можете использовать любой другой символ:

Вы также можете использовать регулярные выражения. Например, чтобы найти все 3-значные числа и заменить их строкой, которую вы используете:

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

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

   И последнее, но не менее важное: всегда полезно сделать резервную копию при редактировании файла с помощью. Для этого просто предоставьте расширение опции

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

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

Рекурсивный поиск и замена 

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

Следующая команда будет рекурсивно искать файлы в текущем рабочем каталоге и передавать имена файлов в .

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

Чтобы исключить каталог, используйте опцию. Например, если вы заменяете строку в локальном git-репо, чтобы исключить все файлы, начинающиеся с точки ( ), используйте:

   Если вы хотите искать и заменять текст только в файлах с определенным расширением, вы должны использовать:

   Другой вариант — использовать команду для рекурсивного поиска всех файлов, содержащих шаблон поиска, а затем передать имена файлов по адресу :

Чтобы узнать о более команд, опции и флаги посетить GNU СЭД руководство и Grymoire СЭД учебник . 

Найти и заменить строку на sed

Существует несколько версий , с некоторыми функциональными различиями между ними. macOS использует версию BSD, и большинство дистрибутивов Linux поставляются с предварительно установленной GNU по умолчанию. Мы будем использовать версию GNU.

Общая форма поиска и замены текста принимает следующую форму:

  • — По умолчанию записывает свой вывод на стандартный вывод. Эта опция говорит редактировать файлы на месте. Если указано расширение (например, -i.bak), будет создана резервная копия исходного файла.
  • — Команда замены, вероятно, наиболее используемая команда в sed.
  • — разделитель персонажа. Это может быть любой символ, но обычно используется символ косой черты ( ).
  • — Обычная строка или регулярное выражение для поиска.
  • — Строка замены.
  • — Глобальный флаг замены. По умолчанию файл читает построчно и изменяет только первое вхождение строки. Если указан флаг замены, все случаи будут заменены.
  • — Имя файла, для которого вы хотите выполнить команду.

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

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

В демонстрационных целях мы будем использовать следующий файл:

file.txt

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

С глобальным флагом замены заменяет все вхождения шаблона поиска:

Как вы могли заметить, в предыдущем примере подстрока внутри строки также заменяется. Если это нежелательное поведение, используйте выражение word-boundery ( ) на обоих концах строки поиска. Это гарантирует, что отдельные слова не совпадают.

Чтобы сделать сопоставление с шаблоном нечувствительным к регистру, используйте флаг. В приведенном ниже примере мы используем как и флаги:

Если вы хотите найти и заменить строку, содержащую символ-разделитель ( ), вам нужно использовать обратную косую черту ( ), чтобы избежать косой черты. Например , чтобы заменить с вы будете использовать

Более простой и читаемый вариант — использовать другой символ-разделитель. Большинство людей используют вертикальную черту ( ) или двоеточие ( ), но вы можете использовать любой другой символ:

Вы также можете использовать регулярные выражения. Например, чтобы найти все 3-значные числа и заменить их строкой, которую вы используете:

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

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

   И последнее, но не менее важное: всегда полезно сделать резервную копию при редактировании файла с помощью. Для этого просто предоставьте расширение опции

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

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

Выбор нужных элементов редактируемого текста

Используя лишь одну команду s, мы убедились в необыкновенно широких возможностях редактора sed. А ведь все, что он делает, сводится к поиску и замене. Причем в процессе работы sed редактирует каждую строку поодиночке, не обращая внимания на другие. Было бы удобно ограничить круг строк, подлежащих изменению, например:

  • Выбирать строки по номерам
  • Выбирать строки в некотором диапазоне номеров
  • Выбирать только строки, содержащие некое выражение
  • Выбирать только строки между некоторыми выражениями
  • Выбирать только строки от начала файла и до некоторого выражения
  • Выбирать только строки от некоторого выражения и до конца файла

Программа sed умеет все это и даже больше. Любая команда редактора sed может применяться адресно, в некотором диапазоне адресов, или с вышеперечисленными ограничениями круга строк. Адрес или ограничение должны непосредственно предшествовать команде:

 sed 'адрес/ограничение команда'

Выбор строк по номерам

Это самый простой случай. Просто указываем номер нужной строки перед командой:

 $ sed '4 s/*//i' gumilev.txt
 Какая странная нега
 В ранних сумерках утра,
 В таянии вешнего снега,
 всем, что гибнет и мудро.

Или:

 $ sed '3 s/В/(В)/' gumilev.txt
 Какая странная нега
 В ранних сумерках утра,
 (В) таянии вешнего снега,
 Во всем, что гибнет и мудро.

Выбор строк в диапазоне номеров

Диапазон указывается, как не удивительно, через запятую:

 $ sed '2,3 s/В/(В)/' gumilev.txt
 Какая странная нега
 (В) ранних сумерках утра,
 (В) таянии вешнего снега,
 Во всем, что гибнет и мудро.

Если нужно указать диапазон до последней строки файла, а вы не знаете, сколько в нем строк, то воспользуйтесь знаком $:

 $ sed '2,$ s/в/(в)/i' gumilev.txt
 Какая странная нега
 (в) ранних сумерках утра,
 (в) таянии вешнего снега,
 (в)о всем, что гибнет и мудро.

Выбор строк, содержащих некое выражение

Искомое выражение заключается в прямые слэши (/) и ставится перед командой:

 $ sed '/утра/ s/в/(в)/i' gumilev.txt
 Какая странная нега
 (в) ранних сумерках утра,
 В таянии вешнего снега,
 Во всем, что гибнет и мудро.

Выбор строк в диапазоне между двумя выражениями

Также как и в случае с номерами строк, диапазон задается через запятую:

 $ sed '/утра/,/мудро/ s/в/(в)/i' gumilev.txt
 Какая странная нега
 (в) ранних сумерках утра,
 (в) таянии вешнего снега,
 (в)о всем, что гибнет и мудро.

Выбор строк от начала файла и до некоего выражения

 $ sed '1,/снега/ s/в/(в)/i' gumilev.txt 
 Какая странная нега
 (в) ранних сумерках утра,
 (в) таянии вешнего снега,
 Во всем, что гибнет и мудро.

Выбор строк от некоего выражения и до конца файла

 $ sed '/снега/,$ s/в/(в)/i' gumilev.txt
 Какая странная нега
 В ранних сумерках утра,
 (в) таянии вешнего снега,
 (в)о всем, что гибнет и мудро.

Синтаксис Sed

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

Синтаксис команды следующий:

Скопируем себе в домашнюю директорию несколько файлов, чтобы попрактиковаться в редактировании.

Воспользуемся утилитой для просмотра содержимого скопированной нам лицензии BSD. По умолчанию sed выводит результаты на экран, поэтому им можно пользоваться для просмотра файлов, не задавая команд редактирования:

Это работает из-за того, что одиночные кавычки содержат команды редактирования, передаваемые sed. Мы ничего не передали, поэтому утилита просто вывела каждую полученную строку в стандартный поток вывода. Теперь покажем, как утилита может использовать стандартный ввод. Перенаправим редактору выходные данные команды “cat” и получим тот же результат.

Copyright (c) The Regents of the University of California. All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. . . . . . .

Мы можем работать с файлами или потоками текста (как происходит при перенаправлении вывода символом «|») одинаково легко.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: