Linux Beginner 20 мин • 21.09.2026 г.

Командата sed в Linux: Пълно ръководство

Практическо ръководство за sed в Linux: замяна, изтриване, филтриране, работа с редове, регулярни изрази и промяна на файлове.

Командата sed в Linux

Предварителни изисквания

  • Основни познания по Linux terminal

Командата sed в Linux: Пълно ръководство

В Linux има инструменти, които изглеждат елементарни, но с времето се превръщат в неизменна част от ежедневната работа. sed е точно такъв инструмент.

Името идва от stream editor – редактор на текстови потоци. За разлика от интерактивен редактор като nano или vim, sed обработва текста автоматично според зададени правила. Това го прави особено полезен при работа с конфигурационни файлове, Bash scripts, log files и автоматизирани DevOps задачи.

Най-често sed се използва за:

  • замяна на текст;
  • изтриване на редове;
  • извличане на определени редове;
  • промяна на конфигурационни файлове;
  • работа с регулярни изрази;
  • автоматизирана обработка на множество файлове;
  • използване в pipelines.

1. Основен синтаксис

Най-простият синтаксис е:

sed 'команда' файл

Например:

sed 's/Linux/linux/' text.txt

Тук:

  • s означава substitute;
  • Linux е текстът, който търсим;
  • linux е новият текст;
  • text.txt е входният файл.

По подразбиране резултатът се извежда на stdout, а оригиналният файл не се променя.

Това е важен принцип при работа със sed: първо можеш да видиш резултата, без да рискуваш да промениш файла.


2. Най-използваната операция – замяна

Основният модел е:

sed 's/стар текст/нов текст/' файл

Например:

echo "Hello Linux" | sed 's/Linux/World/'

Резултат:

Hello World

Без допълнителен модификатор sed заменя само първото съвпадение на ред.

Замяна на всички съвпадения

За всички срещания в реда се използва g:

sed 's/Linux/Ubuntu/g' file.txt

Ако файлът съдържа:

Linux is powerful.
Linux is flexible.

резултатът ще бъде:

Ubuntu is powerful.
Ubuntu is flexible.

Модификаторът g е един от най-често използваните при sed.


3. Промяна на файла с -i

Ако искаме промяната да бъде записана директно във файла, използваме -i:

sed -i 's/Linux/Ubuntu/g' file.txt

Това вече променя file.txt.

При конфигурационни файлове обаче е добра практика първо да проверим резултата без -i:

sed 's/Linux/Ubuntu/g' file.txt

След като сме сигурни, можем да приложим промяната.

Практически пример

Да кажем, че в ~/.bashrc имаме:

alias fa='grep -n --color=always -m "Perf: '

И искаме да премахнем Perf: от командата.

Можем да използваме:

sed -i 's/-m "Perf: /-m "/' ~/.bashrc

Това е типичен реален случай за sed: автоматична промяна на конкретен фрагмент в конфигурационен файл.

Преди такава операция е разумно да направим backup:

cp ~/.bashrc ~/.bashrc.bak

След това:

sed -i 's/-m "Perf: /-m "/' ~/.bashrc

И можем да проверим резултата:

grep -n "alias fa" ~/.bashrc

4. Работа с конкретни редове

sed позволява да посочим точно върху кои редове да работи.

Например:

sed '5d' file.txt

изтрива петия ред от изхода.

За диапазон:

sed '5,10d' file.txt

изтрива редове от 5 до 10.

Важно: без -i това не променя файла. Само показва резултата без посочените редове.

За реално изтриване:

sed -i '5,10d' file.txt

5. Извеждане само на определени редове

Опцията -n спира автоматичното извеждане на всички редове.

Комбинира се с p – print.

Например:

sed -n '10p' file.txt

показва само десетия ред.

Диапазон:

sed -n '10,20p' file.txt

показва редове от 10 до 20.

Това е много удобно при диагностика на конфигурационни файлове.

Например:

sed -n '1,30p' /etc/ssh/sshd_config

може да се използва за бърз преглед на началната част на файла.


6. Работа по текстов шаблон

Не е необходимо да знаем номера на реда.

Можем да кажем на sed да работи върху редове, съдържащи определен текст:

sed '/error/d' logfile.txt

Това премахва от изхода всички редове, съдържащи error.

За реална промяна:

sed -i '/error/d' logfile.txt

Можем да използваме и регулярни изрази:

sed '/^#/d' config.txt

Тук ^# означава ред, който започва с #.

Така можем например да премахнем коментарите от конфигурационен файл при генериране на чист изход.


7. Изтриване на празни редове

Един от класическите примери:

sed '/^$/d' file.txt

^$ означава празен ред.

По-удобен вариант за практически задачи е:

sed '/^[[:space:]]*$/d' file.txt

Той премахва както напълно празни редове, така и редове, съдържащи само интервали или tab символи.


8. Замяна само на определени редове

Можем да комбинираме номер на ред с s.

Например:

sed '10s/old/new/' file.txt

заменя old с new само на ред 10.

Диапазон:

sed '10,20s/old/new/g' file.txt

заменя текста само между редове 10 и 20.

Можем да използваме и текстов шаблон като адрес:

sed '/^\[server\]/s/enabled=yes/enabled=no/' config.ini

Тук замяната се извършва само на редовете, започващи с [server].


9. Използване на различен разделител

При работа с пътища често се получава неприятно количество /.

Например:

sed 's/\/var\/www\/html/\/srv\/www/g' file.txt

Работи, но не е особено четимо.

При sed можем да използваме друг разделител:

sed 's#/var/www/html#/srv/www#g' file.txt

Това е напълно валиден синтаксис.

Особено удобно е при:

  • Linux paths;
  • URLs;
  • filesystem configuration;
  • Docker volumes;
  • Nginx configuration.

10. Работа с регулярни изрази

sed използва регулярни изрази за намиране на текст.

Например:

sed 's/[0-9][0-9]*/NUMBER/g' file.txt

заменя числовите последователности с NUMBER.

При GNU sed можем да използваме -E за Extended Regular Expressions:

sed -E 's/[0-9]+/NUMBER/g' file.txt

-E е стандартизиран и е предпочитан вариант, когато искаме Extended Regular Expressions.


11. Използване на sed с pipe

Една от най-силните страни на sed е работата с pipelines.

Например:

ip addr | sed -n '/inet /p'

Тук резултатът от ip addr се подава към sed.

Друг пример:

ps aux | sed -n '1,10p'

показва първите 10 реда от резултата.

Можем да комбинираме grep и sed:

grep "ERROR" application.log | sed 's/^/[PROBLEM] /'

Получаваме редове с ERROR, като към началото на всеки ред се добавя [PROBLEM].


12. Добавяне и промяна на текст

sed може не само да заменя и изтрива.

Можем да добавим текст преди определен ред:

sed '5i\Нов ред' file.txt

или след него:

sed '5a\Нов ред' file.txt

Можем да заменим целия ред:

sed '5c\Това е новият ред' file.txt

При автоматизирано генериране на конфигурации тези операции могат да бъдат много полезни.


13. Изпълнение на няколко операции

Можем да изпълним няколко sed команди наведнъж:

sed -e 's/foo/bar/g' -e '/^#/d' file.txt

Тук първо се заменя foo с bar, а след това се премахват редовете, започващи с #.

При по-сложни операции можем да използваме ;:

sed 's/foo/bar/g; s/test/prod/g' file.txt

GNU sed поддържа и отделен script файл чрез -f, което е по-подходящо за по-големи автоматизации.


14. Практически пример – промяна на Bash конфигурация

Да разгледаме реален сценарий.

Имаме alias в ~/.bashrc:

alias fa='grep -n --color=always -m "Perf: '

Искаме да променим:

-m "Perf:

на:

-m "

Командата е:

sed -i 's/-m "Perf: /-m "/' ~/.bashrc

След промяната проверяваме:

grep -n "alias fa" ~/.bashrc

Ако всичко е наред, зареждаме отново конфигурацията:

source ~/.bashrc

Това е типичният начин, по който sed се използва в реална Linux администрация: малка, точна и автоматизируема промяна без отваряне на текстов редактор.


15. Backup при използване на -i

При важни конфигурационни файлове можем да поискаме sed да създаде backup.

При GNU/Linux:

sed -i.bak 's/old/new/g' file.txt

Така ще получим:

file.txt
file.txt.bak

Това е значително по-безопасно от директното използване на:

sed -i 's/old/new/g' file.txt

особено когато командата се изпълнява върху системни конфигурации.


16. sed срещу grep, awk и tr

Тези инструменти често се използват заедно, но имат различни силни страни.

Инструмент Основна задача
grep Намиране и филтриране на текст
sed Замяна и трансформация на текстови потоци
awk Обработка на структурирани текстови данни
tr Замяна/трансформация на отделни символи

Например:

grep "ERROR" logfile

е естественият избор за намиране на грешки.

Но:

sed 's/ERROR/WARNING/g' logfile

е подходящ, когато искаме да трансформираме съдържанието.

При по-сложни CSV-подобни данни awk обикновено е по-подходящ.


17. Най-полезните sed конструкции

За ежедневна Linux работа е добре да помним поне следните:

# Замяна на първото съвпадение
sed 's/old/new/' file

# Замяна на всички съвпадения
sed 's/old/new/g' file

# Директна промяна на файла
sed -i 's/old/new/g' file

# Изтриване на ред
sed '5d' file

# Изтриване на диапазон
sed '5,10d' file

# Извеждане на конкретен ред
sed -n '5p' file

# Извеждане на диапазон
sed -n '5,10p' file

# Изтриване на коментари
sed '/^#/d' file

# Изтриване на празни редове
sed '/^$/d' file

# Работа с текстов шаблон
sed '/error/d' file

# Използване на различен разделител
sed 's#/old/path#/new/path#g' file

Заключение

sed е малък инструмент, но е един от фундаменталните инструменти в Linux. С няколко символа можем да заменяме текст, да изтриваме редове, да извличаме информация и да автоматизираме промени в конфигурационни файлове.

Най-важното е да разберем модела:

адрес → команда → действие

Например:

10,20s/old/new/g

означава: в редове 10–20 (адрес) замени (s) всички (g) срещания на old с new.

Когато към това добавим регулярни изрази, pipelines и Bash scripts, sed се превръща от обикновена команда за замяна на текст в мощен инструмент за автоматизация.

Практическото правило е просто: първо изпълни sed без -i, провери резултата и чак след това промени файла. При важни конфигурации още по-добре е да използваш backup.

За актуалната GNU документация sed поддържа както основните POSIX конструкции, така и редица GNU разширения; текущото ръководство на GNU описва версия 4.10.