Команда SED в UNIX розшифровується як редактор потоків і може виконувати багато функцій у файлі, як-от пошук, пошук і заміна, вставка або видалення. Хоча найбільш поширеним використанням команди SED в UNIX є заміна або пошук і заміна. За допомогою SED ви можете редагувати файли, навіть не відкриваючи їх, що є набагато швидшим способом знайти та замінити щось у файлі, ніж спочатку відкрити цей файл у редакторі VI, а потім змінити його.
- SED — потужний редактор текстових потоків. Може виконувати вставку, видалення, пошук і заміну (підстановку).
- Команда SED в unix підтримує регулярні вирази, що дозволяє виконувати зіставлення складних шаблонів.
Синтаксис:
sed OPTIONS... [SCRIPT] [INPUTFILE...]>
приклад:
Розглянемо наведений нижче текстовий файл як вхідні дані.
$cat>geekfile.txt>
unix is great os. unix is opensource. unix is free os. learn operating system. unix linux which one you choose. unix is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.>
Зразки команд
- Заміна або заміна рядка: команда Sed здебільшого використовується для заміни тексту у файлі. Наведена нижче проста команда sed замінює слово unix на linux у файлі.
$sed 's/unix/linux/' geekfile.txt>
Вихід:
linux is great os. unix is opensource. unix is free os. learn operating system. linux linux which one you choose. linux is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.>
Тут s визначає операцію заміни. / є роздільниками. Unix — це шаблон пошуку, а Linux — це рядок заміни.
За замовчуванням команда sed замінює перше входження шаблону в кожному рядку та не замінює друге, третє... входження в рядку. Заміна n-го входження шаблону в рядку: використовуйте прапорці /1, /2 тощо, щоб замінити перше, друге входження шаблону в рядку. Наведена нижче команда замінює друге входження слова unix на linux у рядку.
$sed 's/unix/linux/2' geekfile.txt>
Вихід:
unix is great os. linux is opensource. unix is free os. learn operating system. unix linux which one you choose. unix is easy to learn.linux is a multiuser os.Learn unix .unix is a powerful.>Заміна всіх входжень шаблону в рядку: Прапор заміни /g (глобальна заміна) визначає команду sed для заміни всіх входжень рядка в рядку.
$sed 's/unix/linux/g' geekfile.txt>
Вихід:
linux is great os. linux is opensource. linux is free os. learn operating system. linux linux which one you choose. linux is easy to learn.linux is a multiuser os.Learn linux .linux is a powerful.>Заміна з n-го входження на всі входження в рядку: використовуйте комбінацію /1, /2 тощо та /g, щоб замінити всі шаблони з n-го входження шаблону в рядку. Наступна команда sed замінює третє, четверте, п’яте… слово unix на слово linux у рядку.
$sed 's/unix/linux/3g' geekfile.txt>
Вихід:
unix is great os. unix is opensource. linux is free os. learn operating system. unix linux which one you choose. unix is easy to learn.unix is a multiuser os.Learn linux .linux is a powerful.>Узяти в дужки перший символ кожного слова: цей приклад sed друкує перший символ кожного слова в дужках.
$ echo 'Welcome To The Geek Stuff' | sed 's/([A-Z])/(1)/g'>
Вихід:
(W)elcome (T)o (T)he (G)eek (S)tuff>Заміна рядка на певному номері рядка: Ви можете обмежити команду sed заміною рядка на певному номері рядка. Прикладом є
$sed '3 s/unix/linux/' geekfile.txt>
Вихід:
unix is great os. unix is opensource. unix is free os. learn operating system. linux linux which one you choose. unix is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.>
Наведена вище команда sed замінює рядок лише в третьому рядку. Дублювання заміненого рядка за допомогою прапорця /p : прапорець друку /p друкує замінений рядок двічі на терміналі. Якщо рядок не має шаблону пошуку та не замінюється, тоді /p друкує цей рядок лише один раз.
$sed 's/unix/linux/p' geekfile.txt>
Вихід:
linux is great os. unix is opensource. unix is free os. linux is great os. unix is opensource. unix is free os. learn operating system. linux linux which one you choose. linux linux which one you choose. linux is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful. linux is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.>Друк лише замінених рядків: використовуйте параметр -n разом із прапорцем друку /p, щоб відобразити лише замінені рядки. Тут параметр -n пригнічує повторювані рядки, створені прапорцем /p, і друкує замінені рядки лише один раз.
$sed -n 's/unix/linux/p' geekfile.txt>
Вихід:
linux is great os. unix is opensource. unix is free os. linux linux which one you choose. linux is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.>
Якщо ви використовуєте -n окремо без /p, sed нічого не друкує. Заміна рядка в діапазоні рядків: ви можете вказати діапазон номерів рядків у команді sed для заміни рядка.
$sed '1,3 s/unix/linux/' geekfile.txt>
Вихід:
linux is great os. unix is opensource. unix is free os. learn operating system. linux linux which one you choose. unix is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful.>
Тут команда sed замінює рядки діапазоном від 1 до 3. Інший приклад
$sed '2,$ s/unix/linux/' geekfile.txt>
Вихід:
unix is great os. unix is opensource. unix is free os. learn operating system. linux linux which one you choose. linux is easy to learn.unix is a multiuser os.Learn unix .unix is a powerful>
Тут $ вказує на останній рядок у файлі. Отже, команда sed замінює текст із другого рядка на останній у файлі. Видалення рядків із певного файлу: команду SED також можна використовувати для видалення рядків із певного файлу. Команда SED використовується для виконання операції видалення, навіть не відкриваючи файл
приклади:
1. Щоб видалити певний рядок, скажіть n у цьому прикладі
Syntax: $ sed 'nd' filename.txt Example: $ sed '5d' filename.txt>
2. Видалити останній рядок
модель будівельника
Syntax: $ sed '$d' filename.txt>
3. Видалити лінію з діапазону x до y
Syntax: $ sed 'x,yd' filename.txt Example: $ sed '3,6d' filename.txt>
4. Видалити від n-го до останнього рядка
Syntax: $ sed 'nth,$d' filename.txt Example: $ sed '12,$d' filename.txt>
5. Щоб видалити лінію відповідності шаблону
Syntax: $ sed '/pattern/d' filename.txt Example: $ sed '/abc/d' filename.txt>
Команда SED в Linux | Набір 2