Команда SED в Linux | Комплект 2

Опубликовано: 16 Февраля, 2022

Мы обсудили некоторые параметры команды SED в Sed Command в Linux / Unix с примерами.

SED используется для поиска, фильтрации, подстановки текста, замены и манипуляций с текстом, таких как вставка, удаление, поиск и т. Д. Это одна из мощных утилит, предлагаемых системами Linux / Unix. Мы можем использовать sed с регулярными выражениями. Я надеюсь, что у вас есть хотя бы базовые знания о регулярных выражениях Linux.

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

Общий синтаксис sed -
sed OPTIONS… [SCRIPT] [INPUTFILE…]

Сначала создайте файл .txt, с которым я собираюсь выполнить операцию для команд SED. В этом блоге я использовал файл «a.txt» для объяснения всех примеров. Блог станет слишком длинным, если я напишу вывод каждой команды sed. Таким образом, вы можете сначала использовать один и тот же файл для отработки всех команд.

[root@rhel7 ~]# cat a.txt
life isn"t meant to be easy, life is meant to be lived.
Try to learn & understand something new everyday in life.
Respect everyone & most important love everyone.
Don’t hesitate to ask for love & don’t hesitate to show love too.
Life is too short to be shy.
In life experience will help you differentiating right from wrong.

# Начнем с расстояния между файлами
1 - Вставляйте одну пустую строку после каждой строки -

 [root @ rhel7 ~] # sed G a.txt

2 - Чтобы вставить две пустые строки -

 [root @ rhel7 ~] # sed 'G; G' a.txt

3 - Удалите пустые строки и вставьте одну пустую строку после каждой строки -

 [корень @ rhel7 ~] # sed '/ ^ $ / d; G' a.txt

4 - Вставьте черную линию над каждой строкой, которая соответствует слову «любовь» -

 [root @ rhel7 ~] # sed '/ love / {x; p; x;}' a.txt

5 - Вставьте пустую строку под каждой строкой, которая соответствует слову «любовь» -

 [root @ rhel7 ~] # sed '/ love / G' a.txt

6 - Вставьте 5 пробелов слева от каждой строки -

[root@rhel7 ~]# sed "s/^/     /" a.txt

# Нумерация строк
1 - пронумеровать каждую строку файла (выравнивание по левому краю). ** = ** используется для нумерации строки. t используется для табуляции между числом и предложением -

 [root @ rhel7 ~] # sed = a.txt | sed 'N; s /  n /  t /'

2 - пронумеровать каждую строку файла (номер слева, выровнен по правому краю). Эта команда похожа на `cat -n filename`.

 [root @ rhel7 ~] # sed = a.txt | sed 'N; с / ^ / /; s / *  (.  {4, } )  n /  1 / '

3 - Пронумеруйте каждую строку файла, только если строка не пустая -

 [root @ rhel7 ~] # sed '/./=' a.txt | sed '/./N; с /  п / / '

# Удаление строк
1 - Удалить определенную строку -
Синтаксис: sed 'nd' имя файла
Пример :

 [root @ rhel7 ~] # sed '5d' a.txt

2 - Удалить последнюю строку
Синтаксис: sed '$ d' имя файла

3 - Удалить строку из диапазона от x до y
Синтаксис: sed 'x, yd' имя файла
Пример :

 [root @ rhel7 ~] # sed '3,5d' a.txt

4 - Удалить с n-й до последней строки
Синтаксис: sed 'nth, $ d' filename
Пример :

 [root @ rhel7 ~] # sed '2, $ d' a.txt

5 - Удалите строку соответствия шаблону -
Синтаксис: sed '/ pattern / d' имя файла
Пример :

 [корень @ rhel7 ~] # sed '/ life / d' a.txt

6 - Удалить строки, начинающиеся с n-й строки и каждой 2-й строки оттуда -
Синтаксис: sed 'n ~ 2d' filename
Пример :

 [root @ rhel7 ~] # sed '3 ~ 2d' a.txt

7 - Удалите строки, соответствующие шаблону, и 2 строки после них -
Синтаксис: sed '/ pattern /, + 2d' filename
Пример :

 [root @ rhel7 ~] # sed '/ easy /, + 2d' a.txt

8 - Удалить пустые строки

 [корень @ rhel7 ~] # sed '/ ^ $ / d' a.txt

9 - Удалить пустые строки или строки, начинающиеся с символа «#» -

 [корень @ rhel7 ~] # sed -i '/ ^ # / d; / ^ $ / d' a.txt

# Просмотр / печать файлов
Если мы хотим просмотреть содержимое файла, мы используем команду cat, а если мы хотим просмотреть нижнее и верхнее содержимое любого файла, мы используем такие инструменты, как голова и хвост. Но что, если нам нужно просмотреть определенный раздел в середине любого файла? Здесь мы обсудим, как использовать команду SED для просмотра раздела любого файла.
1 - Просмотр файла в диапазоне от x до y -
Синтаксис: sed -n 'x, yp' имя_файла
Пример :

 [корень @ rhel7 ~] # sed -n '2,5p' a.txt

2 - Просмотреть весь файл, кроме указанного диапазона -
Синтаксис: sed 'x, yd' имя файла
Пример :

 [root @ rhel7 ~] # sed '2,4d' a.txt

3 - Вывести n-ю строку файла -
Синтаксис: sed -n 'адрес'p имя файла
Пример :

 [корень @ rhel7 ~] # sed -n '4'p a.txt

4 - Распечатать строки от x-й строки до y-й строки.
Синтаксис: sed -n 'x, y'p имя_файла
Пример :

 [корень @ rhel7 ~] # sed -n '4,6'p a.txt

5 - Вывести только последнюю строку -
Синтаксис: sed -n '$' p имя_файла

6 - Печать от n-й строки до конца файла -
Синтаксис: sed -n 'n, $ p' имя_файла
Пример :

 [корень @ rhel7 ~] # sed -n '3, $' p a.txt

Печать шаблонов
7 - Распечатайте только ту строку, которая соответствует шаблону -
Синтаксис: sed -n / шаблон / p имя файла
Пример :

 [корень @ rhel7 ~] # sed -n / every / p a.txt

8 - Распечатать строки, соответствующие шаблону, т.е. от ввода до x-й строки.
Синтаксис: sed -n '/ pattern /, xp' имя_файла
Пример :

 [root @ rhel7 ~] # sed -n '/ every /, 5p' a.txt

Далее печатаются строки, соответствующие шаблону, 3-я строка соответствует шаблону «все», поэтому печатаются с 3-й по 5-ю строку. Используйте $ вместо 5, если хотите распечатать файл до конца.

9 - печатает строки от x-й строки ввода до строки, соответствующей шаблону. Если шаблон не найден, он печатается до конца файла.
Синтаксис: sed -n 'x, / pattern / p' имя файла
Пример :

 sed -n '1, / все / p' a.txt

10 - Распечатайте строки, соответствующие шаблону, до следующих x-ых строк -
Синтаксис: sed -n '/ pattern /, + xp' имя_файла
Пример :

 sed -n '/ узнать /, + 2p' a.txt

# Замена командой sed
1 - Измените первое вхождение шаблона -

 [корень @ rhel7 ~] # sed 's / life / leaves /' a.txt

2 - Замена n-го вхождения шаблона в строке -
Синтаксис: sed 's / old_pattern / new_pattern / n' имя файла
Пример :

 [root @ rhel7 ~] # sed 's / to / two / 2' a.txt

Мы написали «2», потому что заменяем второе вхождение. Точно так же вы можете использовать 3, 4 и т. Д. В соответствии с потребностями.

3 - Замена всех вхождений паттерна в строку.

 [root @ rhel7 ~] # sed 's / life / learn / g' a.txt

4 - Заменить шаблон с n-го на все вхождения в строке.
Синтаксис: sed 's / old_pattern / new_pattern / ng' имя файла
Пример :

 [root @ rhel7 ~] # sed 's / to / TWO / 2g' a.txt

Примечание. Эта команда sed заменяет второе, третье и т. Д. Вхождения шаблона «to» на «TWO» в строке.

Если вы хотите напечатать только замененные строки, используйте параметр «-n» вместе с флагом печати «/ p», чтобы отобразить только замененные строки -

 [root @ rhel7 ~] # sed -n 's / to / TWO / p' a.txt

И если вы хотите напечатать замененные строки дважды, используйте только флаг печати «/ p» без опции «-n» -

 [root @ rhel7 ~] # sed 's / to / TWO / p' a.txt

5 - Замена шаблона на конкретный номер строки. Здесь «m» - номер строки.
Синтаксис: sed 'ms / old_pattern / new_pattern /' имя файла
Пример :

 [root @ rhel7 ~] # sed '3 с / каждый / каждый /' a.txt

Если вы хотите распечатать только замененные строки -

 [root @ rhel7 ~] # sed -n '3 с / каждый / каждый / p' a.txt

6 - Заменить строку в определенном диапазоне строк -
Синтаксис: sed 'x, ys / old_pattern / new_pattern /' имя_файла
куда,
x = номер начальной строки
и y = номер конечной строки

Пример :

 [root @ rhel7 ~] # sed '2,5 с / to / TWO /' a.txt

Примечание. $ Можно использовать вместо «y», если мы хотим изменить шаблон до последней строки в файле.
Пример :

 [root @ rhel7 ~] # sed '2, $ s / to / TWO /' a.txt

7 - Если вы хотите заменить шаблон, чтобы игнорировать регистр символов (начиная с верхнего или нижнего регистра), то есть два способа заменить такие шаблоны:
Во-первых, используя флаг печати «/ i» -
Синтаксис: sed 's / old_pattern / new_pattern / i' имя файла
Пример :

 [root @ rhel7 ~] # sed 's / life / Love / i' a.txt

Во-вторых, используя регулярные выражения -

 [root @ rhel7 ~] # sed 's / [Ll] ife / Love / g' a.txt

8 - Чтобы заменить несколько пробелов одним пробелом -

 [root @ rhel7 clang] # имя файла sed 's / * / / g'

9 - Замените один шаблон, а затем другой шаблон -
Синтаксис: sed '/ followed_pattern / s / old_pattern / new_pattern /' имя_файла
Пример :

 [root @ rhel7 ~] # sed '/ is / s / live / love /' a.txt

10 - Заменить шаблон на другой, кроме n-й строки.
Синтаксис: sed 'n! S / old_pattern / new_pattern /' имя_файла
Пример :

 [root @ rhel7 ~] # sed -i '5! s / life / love /' a.txt