Редактор потока (SED): основы

Redaktor Potoka Sed Osnovy



SED, также известный как потоковый редактор, — очень полезный инструмент. Он используется для поиска определенного слова или шаблона и последующего выполнения каких-либо действий со словом или шаблоном или, другими словами, его преобразования. В Windows SED также известен как функции «найти» и «заменить». SED поставляется с Ubuntu, поэтому ничего устанавливать не нужно; просто начните использовать его. В этом уроке мы покажем вам, как использовать SED или редактор потока.

Команда «С»

Самая важная из всех команд в SED или потоковом редакторе — это команда «s». «S» означает замену. Синтаксис следующий:







's / регулярное выражение / замена / флаги


Итак, давайте для примеров воспользуемся файлом «file.txt». Вот как выглядит «file.txt», если разобраться:




Давайте на примере покажем, как работает команда «s»:



но 's / первый / луна / я файл.txt > луна.txt


Когда встречается такое выражение, это означает:





    • s – означает замену.
    • first – слово для поиска в файле с именем «file.txt».
    • луна – Слово «первый» заменено словом «луна».
    • я – означает игнор. Сначала мы проигнорируем эту часть.
    • file.txt — файл, в котором SED будет искать шаблон или слово. В данном случае слово «первый» будет:
    • искал в файле.txt

    • Moon.txt – Когда слово «первый» заменяется словом «луна», оно будет сохранено в «moon.txt».

Итак, что здесь происходит? SED заменяет слово «луна» словом «первый» только в первом случае (это означает, что если слово «первый» встречается несколько раз, оно не заменит его целиком и не заменит несколько раз). Файл, который он ищет, называется «file.txt», и после преобразования или замены он будет сохранен в «moon.txt».



Вот как это выглядит:


Не забудьте поставить «/» там, где это необходимо. Если вы опустите «/», SED не примет команду.

До сих пор мы лишь заменили слово «первый» на «встречавшийся» с заменой. Теперь предположим, что мы хотим заменить слово «линия» (которое встречается много раз — а точнее, четыре раза) в третьей строке на слово «ангел».

Как нам конкретно нацелиться на эту третью линию? Мы используем следующую команду:

но '3 с / линия / ангел / я файл.txt > ангел.txt


Итак, что здесь только что произошло? Ну, «3» указывает номер строки. Поэтому он переходит на третью строчку. Затем замените слово «ангел» на «линия» в файле с именем «file.txt» и сохраните преобразованный файл как «angel.txt».


Что делать, если мы хотим заменить или преобразовать строки «3» и «4»?

но ' 3 ,4с / линия / ангел / я файл.txt > angel2.txt



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

Давайте на примере покажем, как работает команда «s»:

но 's / линия / солнце / г’ file.txt > sun.txt


Когда встречается такое выражение, это означает:

«G» означает глобальный. Помните, что в первом примере, когда мы используем флаг «i», происходит только одна замена. Теперь, когда мы добавили букву «g» для обозначения «глобальный», это означает замену везде. Итак, вместо того, чтобы говорить «первая строка», «вторая строка», «третья строка» и «последняя строка», там говорится «первое солнце», «второе солнце», «третье солнце» и «последнее солнце». Он заменяет слово line во всем файле (везде) на слово «солнце».


А что, если мы хотим выбрать одну строку на основе содержащегося в ней слова? Итак, мы видим, что в последней строке «file.txt» есть слово «last». Теперь предположим, что нам нужна фраза «Это последняя строка. Это последнее предложение». предложение звучит так: «Это последний призрак. Это последнее предложение».

Пишем следующее:

но ' / последний / с / линия / призрак / ' файл.txt > призрак.txt


Слово «последний» здесь указывает SED найти строку, содержащую слово «последний», а затем заменить слово «строка» на «призрак» внутри этой строки.


Теперь предположим, что мы хотим сделать противоположное. Предположим, мы хотим, чтобы в каждой строке без слова «последняя» слово «строка» было заменено на «призрак». Напишем следующее:

но ' / последний /! с / линия / призрак / ' файл.txt > Ghost2.txt


Как вы можете видеть здесь, в каждой строке, кроме последней (которая содержит слово «последняя»), слово «строка» заменено на слово «призрак».


Мы также можем сделать это с номерами строк:

но ' 3 , 4 ! с / линия / ночь / я файл.txt > ночь.txt


В этом случае строки 3 и 4 опускаются, но в каждой второй строке слово «строка» заменяется словом «ночь».

Несколько команд

А что, если у вас было несколько команд? Вы бы предпочли делать это по одному или все сразу, чтобы сэкономить время и работу?

Что, если мы захотим изменить слово «первый» на «день», «второй» на «ночь», а «остальные» на «призрак»? Для этого мы используем точку с запятой. Не забудьте в конце поставить точку с запятой!

Обратите внимание, что вам не обязательно ставить флаг «i» или флаг «игнорировать», но вам обязательно нужно поставить косую черту (/) после фразы преобразования.

Теперь проверим это на примере:

но 's / первый / день / ; с / второй / ночь / ; с / третий / призрак / ; с / последний / призрак / ;’ файл.txt > комбинация.txt


Заключение

Редактор потока или SED — это способ выбрать слово или шаблон и преобразовать его. На самом деле это эквивалент функций Window «найти» и «заменить» в командной строке. Команда SED может оказаться очень сложной, но если вы знаете хотя бы основы, вы готовы к ней! SED на самом деле является очень мощным инструментом со множеством функций. Хотя мы не можем охватить их все в одном руководстве, мы рассмотрели основы SED. По сути, мы научились преобразовывать конкретное слово с помощью команды «s», где «s» означает замену. Мы можем заменять слова другими словами, выборочно выбирать строку, в которой будет происходить замена, или даже отрицать ее. В любом случае, это самая простая часть SED.

Приятного кодирования!