[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"page-ru-/guides/linux/sed-advanced":3,"mdc-o6nhlk-key":689,"mdc--soci4c-key":715,"mdc-3z0trd-key":745,"mdc--lbhkrp-key":778,"mdc-hh8tzf-key":801,"related-/guides/linux/sed-basic,/guides/linux/awk-advanced,/guides/linux/scripting-automation":825,"mdc--a7tmdm-key":1288,"mdc-5fnwfn-key":1334,"mdc-gecekh-key":1376,"mdc--ip6gst-key":1431,"mdc--5vkfno-key":1464},{"id":4,"title":5,"appliesTo":6,"author":11,"body":12,"canonical":622,"code":622,"createdAt":623,"description":624,"difficulty":625,"draft":626,"estimatedTime":627,"extension":628,"faq":629,"howToSteps":642,"howToTotalTime":661,"image":622,"keywords":662,"locale":670,"meta":671,"navigation":147,"path":672,"platform":673,"related":674,"section":678,"seo":679,"severity":622,"stem":680,"summary":681,"tags":682,"twitterCreator":622,"twitterSite":622,"type":687,"updatedAt":623,"__hash__":688},"content_ru/guides/linux/sed-advanced.md","Как использовать продвинутый `sed` для сложных преобразований текста и скриптов",[7,8,9,10],"Ubuntu 20.04","Ubuntu 22.04","Debian 11","Fedora 36+","FixPedia Team",{"type":13,"value":14,"toc":608},"minimark",[15,20,31,35,78,82,87,93,169,173,188,229,240,257,261,271,289,295,299,302,351,354,379,383,389,423,430,433,437,440,458,461,476,479,483,486,520,525,529,598,604],[16,17,19],"h2",{"id":18},"введение-зачем-это-нужно","Введение / Зачем это нужно",[21,22,23,27,28,30],"p",{},[24,25,26],"code",{},"sed"," — мощный инструмент для обработки текста в Linux. В базовом гайде описаны простейшие операции, но продвинутые сценарии требуют большего контроля: обработка нескольких файлов, сложные регулярные выражения, автоматизация и отладка. После выполнения этого гайда вы сможете писать эффективные ",[24,29,26],{},"-скрипты, которые ускоряют рутинную работу с текстовыми данными и интегрируются в пайплайны автоматизации.",[16,32,34],{"id":33},"требования-подготовка","Требования / Подготовка",[36,37,38,46,56,68],"ul",{},[39,40,41,45],"li",{},[42,43,44],"strong",{},"Операционная система:"," Linux (Ubuntu 20.04+, Debian 11+, Fedora 36+ и другие современные дистрибутивы).",[39,47,48,51,52,55],{},[42,49,50],{},"Права пользователя:"," Необходимо право на запись в целевые файлы (обычно права владельца или ",[24,53,54],{},"sudo",").",[39,57,58,61,62,64,65,67],{},[42,59,60],{},"Установленные пакеты:"," GNU ",[24,63,26],{}," (входит в базовый набор большинства дистрибутивов). На редких системах может потребоваться явная установка ",[24,66,26],{},".",[39,69,70,73,74,77],{},[42,71,72],{},"Инструменты для отладки:"," Флаг ",[24,75,76],{},"--debug"," (GNU sed) и возможность тестирования команд на небольших файлах.",[16,79,81],{"id":80},"пошаговая-инструкция","Пошаговая инструкция",[83,84,86],"h3",{"id":85},"шаг-1-установка-gnu-sed-если-необходимо","Шаг 1: Установка GNU sed (если необходимо)",[21,88,89,90,92],{},"Большинство дистрибутивов Linux поставляются с GNU ",[24,91,26],{},". Если вы работаете на минимальной системе, установите его через менеджер пакетов:",[94,95,100],"pre",{"className":96,"code":97,"language":98,"meta":99,"style":99},"language-bash shiki shiki-themes github-light github-dark","# Для Debian/Ubuntu\nsudo apt update && sudo apt install sed -y\n\n# Для Fedora/Red Hat\nsudo dnf install sed -y\n","bash","",[24,101,102,111,142,149,155],{"__ignoreMap":99},[103,104,107],"span",{"class":105,"line":106},"line",1,[103,108,110],{"class":109},"sJ8bj","# Для Debian/Ubuntu\n",[103,112,114,117,121,124,128,130,132,135,138],{"class":105,"line":113},2,[103,115,54],{"class":116},"sScJk",[103,118,120],{"class":119},"sZZnC"," apt",[103,122,123],{"class":119}," update",[103,125,127],{"class":126},"sVt8B"," && ",[103,129,54],{"class":116},[103,131,120],{"class":119},[103,133,134],{"class":119}," install",[103,136,137],{"class":119}," sed",[103,139,141],{"class":140},"sj4cs"," -y\n",[103,143,145],{"class":105,"line":144},3,[103,146,148],{"emptyLinePlaceholder":147},true,"\n",[103,150,152],{"class":105,"line":151},4,[103,153,154],{"class":109},"# Для Fedora/Red Hat\n",[103,156,158,160,163,165,167],{"class":105,"line":157},5,[103,159,54],{"class":116},[103,161,162],{"class":119}," dnf",[103,164,134],{"class":119},[103,166,137],{"class":119},[103,168,141],{"class":140},[83,170,172],{"id":171},"шаг-2-редактирование-нескольких-файлов-одновременно","Шаг 2: Редактирование нескольких файлов одновременно",[21,174,175,176,179,180,183,184,187],{},"Для массовой замены в нескольких файлах используйте ",[24,177,178],{},"find"," вместе с ",[24,181,182],{},"-exec"," и ",[24,185,186],{},"sed -i",":",[94,189,191],{"className":96,"code":190,"language":98,"meta":99,"style":99},"find . -type f -name \"*.txt\" -exec sed -i 's/OldValue/NewValue/g' {} +\n",[24,192,193],{"__ignoreMap":99},[103,194,195,197,200,203,206,209,212,215,217,220,223,226],{"class":105,"line":106},[103,196,178],{"class":116},[103,198,199],{"class":119}," .",[103,201,202],{"class":140}," -type",[103,204,205],{"class":119}," f",[103,207,208],{"class":140}," -name",[103,210,211],{"class":119}," \"*.txt\"",[103,213,214],{"class":140}," -exec",[103,216,137],{"class":119},[103,218,219],{"class":140}," -i",[103,221,222],{"class":119}," 's/OldValue/NewValue/g'",[103,224,225],{"class":119}," {}",[103,227,228],{"class":119}," +\n",[21,230,231,232,235,236,239],{},"Команда рекурсивно ищет файлы с расширением ",[24,233,234],{},".txt"," в текущем каталоге и применяет замену ",[24,237,238],{},"OldValue → NewValue"," в каждом файле.",[241,242,243],"blockquote",{},[21,244,245,246,249,250,252,253,256],{},"⚠️ Важно: Флаг ",[24,247,248],{},"-i"," работает только с GNU ",[24,251,26],{},". На системах macOS используйте ",[24,254,255],{},"sed -i '' ..."," для того же эффекта.",[83,258,260],{"id":259},"шаг-3-использование-расширенных-регулярных-выражений","Шаг 3: Использование расширенных регулярных выражений",[21,262,263,264,267,268,187],{},"Для более гибкого сопоставления используйте расширенные регулярные выражения (",[24,265,266],{},"-E",") или эквивалентный флаг ",[24,269,270],{},"-r",[94,272,274],{"className":96,"code":273,"language":98,"meta":99,"style":99},"sed -E 's/([0-9]{3})[.-]?([0-9]{3})[.-]?([0-9]{4})/\\1-\\2-\\3/' phone.txt\n",[24,275,276],{"__ignoreMap":99},[103,277,278,280,283,286],{"class":105,"line":106},[103,279,26],{"class":116},[103,281,282],{"class":140}," -E",[103,284,285],{"class":119}," 's/([0-9]{3})[.-]?([0-9]{3})[.-]?([0-9]{4})/\\1-\\2-\\3/'",[103,287,288],{"class":119}," phone.txt\n",[21,290,291,292,67],{},"Результат: все номера телефонов преобразуются в формат ",[24,293,294],{},"XXX-XXX-XXXX",[83,296,298],{"id":297},"шаг-4-создание-и-использование-sed-скрипта","Шаг 4: Создание и использование sed-скрипта",[21,300,301],{},"Сложные преобразования удобнее записать в отдельный скрипт:",[94,303,306],{"className":304,"code":305,"language":26,"meta":99,"style":99},"language-sed shiki shiki-themes github-light github-dark","# transform.sed\n# Удалить пустые строки\n/^$/d\n# Привести весь текст к нижнему регистру\ns/[A-Z]/\\l&/g\n# Добавить комментарий в конец файла, если он отсутствует\n$ a\\\n# EOF\n",[24,307,308,313,318,323,328,333,339,345],{"__ignoreMap":99},[103,309,310],{"class":105,"line":106},[103,311,312],{},"# transform.sed\n",[103,314,315],{"class":105,"line":113},[103,316,317],{},"# Удалить пустые строки\n",[103,319,320],{"class":105,"line":144},[103,321,322],{},"/^$/d\n",[103,324,325],{"class":105,"line":151},[103,326,327],{},"# Привести весь текст к нижнему регистру\n",[103,329,330],{"class":105,"line":157},[103,331,332],{},"s/[A-Z]/\\l&/g\n",[103,334,336],{"class":105,"line":335},6,[103,337,338],{},"# Добавить комментарий в конец файла, если он отсутствует\n",[103,340,342],{"class":105,"line":341},7,[103,343,344],{},"$ a\\\n",[103,346,348],{"class":105,"line":347},8,[103,349,350],{},"# EOF\n",[21,352,353],{},"Выполните скрипт:",[94,355,357],{"className":96,"code":356,"language":98,"meta":99,"style":99},"sed -f transform.sed input.txt > output.txt\n",[24,358,359],{"__ignoreMap":99},[103,360,361,363,366,369,372,376],{"class":105,"line":106},[103,362,26],{"class":116},[103,364,365],{"class":140}," -f",[103,367,368],{"class":119}," transform.sed",[103,370,371],{"class":119}," input.txt",[103,373,375],{"class":374},"szBVR"," >",[103,377,378],{"class":119}," output.txt\n",[83,380,382],{"id":381},"шаг-5-объединение-sed-с-xargs-для-пакетной-обработки","Шаг 5: Объединение sed с xargs для пакетной обработки",[21,384,385,386,187],{},"Когда нужно обработать список файлов, хранящийся в отдельном файле, используйте ",[24,387,388],{},"xargs",[94,390,392],{"className":96,"code":391,"language":98,"meta":99,"style":99},"cat filelist.txt | xargs -I {} sed -i 's/deprecated/removed/g' {}\n",[24,393,394],{"__ignoreMap":99},[103,395,396,399,402,405,408,411,413,415,417,420],{"class":105,"line":106},[103,397,398],{"class":116},"cat",[103,400,401],{"class":119}," filelist.txt",[103,403,404],{"class":374}," |",[103,406,407],{"class":116}," xargs",[103,409,410],{"class":140}," -I",[103,412,225],{"class":119},[103,414,137],{"class":119},[103,416,219],{"class":140},[103,418,419],{"class":119}," 's/deprecated/removed/g'",[103,421,422],{"class":119}," {}\n",[21,424,425,426,429],{},"Команда считывает имена файлов из ",[24,427,428],{},"filelist.txt"," и последовательно применяет замену к каждому файлу.",[431,432],"in-article-ad",{},[83,434,436],{"id":435},"шаг-6-проверка-результата-изменений","Шаг 6: Проверка результата изменений",[21,438,439],{},"После применения изменений убедитесь, что они выполнены правильно:",[94,441,443],{"className":96,"code":442,"language":98,"meta":99,"style":99},"sed -n '1,10p' updated_file.txt\n",[24,444,445],{"__ignoreMap":99},[103,446,447,449,452,455],{"class":105,"line":106},[103,448,26],{"class":116},[103,450,451],{"class":140}," -n",[103,453,454],{"class":119}," '1,10p'",[103,456,457],{"class":119}," updated_file.txt\n",[21,459,460],{},"Если вы хотите получить разницу с исходным файлом:",[94,462,464],{"className":96,"code":463,"language":98,"meta":99,"style":99},"diff original_file.txt updated_file.txt\n",[24,465,466],{"__ignoreMap":99},[103,467,468,471,474],{"class":105,"line":106},[103,469,470],{"class":116},"diff",[103,472,473],{"class":119}," original_file.txt",[103,475,457],{"class":119},[21,477,478],{},"Если вывод не содержит несоответствий, преобразования прошли успешно.",[16,480,482],{"id":481},"проверка-результата","Проверка результата",[21,484,485],{},"Для окончательной проверки выполните:",[487,488,489,502,511],"ol",{},[39,490,491,494,495,498,499,67],{},[42,492,493],{},"Просмотрите изменённые строки"," с помощью ",[24,496,497],{},"sed -n '1,20p'"," или ",[24,500,501],{},"head -n 20",[39,503,504,507,508,67],{},[42,505,506],{},"Сравните с исходной версией"," через ",[24,509,510],{},"diff original updated",[39,512,513,516,517,67],{},[42,514,515],{},"Проверьте логи"," (если вы сохраняли их) для массовых операций с помощью ",[24,518,519],{},"find ... -exec",[21,521,522,523,67],{},"Если все результаты соответствуют ожиданиям, вы успешно освоили продвинутый ",[24,524,26],{},[16,526,528],{"id":527},"возможные-проблемы","Возможные проблемы",[36,530,531,547,567,582],{},[39,532,533,539,540,542,543,546],{},[42,534,535,536,538],{},"Флаг ",[24,537,248],{}," отсутствует"," – на некоторых Unix-подобных системах (например, macOS) ",[24,541,26],{}," требует дополнительного аргумента: ",[24,544,545],{},"sed -i '' 's/old/new/g' file",". Проверьте man-страницу вашей версии.",[39,548,549,552,553,556,557,556,560,556,563,566],{},[42,550,551],{},"Неправильное экранирование регулярных выражений"," – специальные символы (",[24,554,555],{},"&",", ",[24,558,559],{},"\\",[24,561,562],{},"|",[24,564,565],{},"+",") должны быть экранированы или экранироваться в bash-строках. Используйте одинарные кавычки, чтобы избежать интерпретации оболочкой.",[39,568,569,572,573,575,576,578,579,55],{},[42,570,571],{},"Отсутствие прав на запись"," – если ",[24,574,186],{}," не может изменить файл, выполните команду с ",[24,577,54],{}," или измените права доступа к файлу (",[24,580,581],{},"chmod u+w filename",[39,583,584,587,588,590,591,593,594,597],{},[42,585,586],{},"Производительность при массовой обработке"," – для очень большого количества файлов ",[24,589,519],{}," может быть медленным. Рассмотрите возможность использования ",[24,592,388],{}," с параллельными процессами (",[24,595,596],{},"xargs -P 4",") или написания небольшого скрипта на Python/Perl.",[21,599,600,601,603],{},"Теперь у вас есть полный набор инструментов для сложных задач обработки текста с помощью ",[24,602,26],{},". Экспериментируйте, сочетайте приёмы и автоматизируйте свою работу с текстовыми данными!",[605,606,607],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":99,"searchDepth":113,"depth":113,"links":609},[610,611,612,620,621],{"id":18,"depth":113,"text":19},{"id":33,"depth":113,"text":34},{"id":80,"depth":113,"text":81,"children":613},[614,615,616,617,618,619],{"id":85,"depth":144,"text":86},{"id":171,"depth":144,"text":172},{"id":259,"depth":144,"text":260},{"id":297,"depth":144,"text":298},{"id":381,"depth":144,"text":382},{"id":435,"depth":144,"text":436},{"id":481,"depth":113,"text":482},{"id":527,"depth":113,"text":528},null,"2026-06-29 14:56:16","Узнайте, как использовать продвинутый `sed` для сложных преобразований текста, манипуляций с множественными файлами и скриптов. Пошаговая инструкция за 10 минут.","hard",false,"15-20 мин","md",[630,633,636,639],{"question":631,"answer":632},"Как отредактировать несколько файлов одновременно с помощью sed?","Используйте `sed -i` с шаблоном файлов, например `sed -i 's/old/new/g' *.txt`.",{"question":634,"answer":635},"Как использовать расширенные регулярные выражения в sed?","Добавьте флаг `-E` (или `-r`), например `sed -E 's/([a-z]+)@([a-z]+)\\.com/\\1@\\2.org/' file`.",{"question":637,"answer":638},"Как автоматизировать сложные преобразования с помощью sed-скрипта?","Запишите команды в файл скрипта `.sed` и выполняйте `sed -f script.sed file`, или используйте `sed -e` для chaining.",{"question":640,"answer":641},"Как отладить проблемную команду sed?","Добавьте флаг `-n` для пошагового просмотра, используйте `--debug` (GNU sed) или сначала протестируйте на небольшом фрагменте.",[643,646,649,652,655,658],{"name":644,"text":645},"Установка GNU sed (если необходимо)","Большинство дистрибутивов Linux поставляются с GNU sed. Для установки на Ubuntu/Debian выполните `sudo apt install sed`. На Fedora/Red Hat используйте `sudo dnf install sed`.",{"name":647,"text":648},"Редактирование нескольких файлов одновременно","Чтобы заменить строку во всех текстовых файлах каталога, выполните:\n\n```bash\nfind . -type f -name \"*.txt\" -exec sed -i 's/OldValue/NewValue/g' {} +\n```\nЭта команда рекурсивно ищет файлы с расширением `.txt` и применяет замену в каждом из них.",{"name":650,"text":651},"Использование расширенных регулярных выражений","Включите расширенные regex с помощью `-E` (или `-r`):\n\n```bash\nsed -E 's/([0-9]{3})[.-]?([0-9]{3})[.-]?([0-9]{4})/\\1-\\2-\\3/' phone.txt\n```\nКоманда преобразует номера телефонов в формат `XXX-XXX-XXXX`.",{"name":653,"text":654},"Создание и использование sed-скрипта","Создайте файл `transform.sed` со следующими правилами:\n\n```sed\n# Удалить пустые строки\ns/\\n//\n# Заменить все заглавные буквы на строчные\ntolower\n# Добавить окончание файла, если отсутствует\n$ a\\\n# EOF\n```\nВыполните скрипт командой:\n\n```bash\nsed -f transform.sed input.txt > output.txt\n```",{"name":656,"text":657},"Объединение sed с xargs для пакетной обработки","Для безопасной обработки большого количества файлов используйте `xargs`:\n\n```bash\ncat list.txt | xargs -I {} sed -i 's/deprecated/removed/g' {}\n```\nКоманда считывает имена файлов из `list.txt` и заменяет `deprecated` на `removed` во всех них.",{"name":659,"text":660},"Проверка результата изменений","Проверьте изменения, используя `diff` или просмотрев первые строки изменённых файлов:\n\n```bash\nsed -n '1,10p' modified_file.txt\n```\nЕсли результат соответствует ожиданиям, изменения успешно применены.","PT20M",[663,664,665,666,667,668,669],"продвинутый sed","регулярные выражения sed","множественные файлы sed","скрипты sed","sed в Linux","команды sed","автоматизация sed","ru_RU",{},"/guides/linux/sed-advanced","linux",[675,676,677],"/guides/linux/sed-basic","/guides/linux/awk-advanced","/guides/linux/scripting-automation","Гайды Linux",{"title":5,"description":624},"guides/linux/sed-advanced","В этом гайде вы узнаете, как использовать продвинутый `sed` для сложных задач, таких как обработка нескольких строк, использование расширенных регулярных выражений и автоматизация изменений в нескольких файлах.",[683,26,684,685,686],"Linux","регулярные выражения","автоматизация","скрипты","guide","x-9XXch63oGjmTisgOmEZoIGfseIkCgkt-SfwC_to9s",{"data":690,"body":691},{},{"type":692,"children":693},"root",[694],{"type":695,"tag":21,"props":696,"children":697},"element",{},[698,701,706,708,714],{"type":699,"value":700},"text","Используйте ",{"type":695,"tag":24,"props":702,"children":704},{"className":703},[],[705],{"type":699,"value":186},{"type":699,"value":707}," с шаблоном файлов, например ",{"type":695,"tag":24,"props":709,"children":711},{"className":710},[],[712],{"type":699,"value":713},"sed -i 's/old/new/g' *.txt",{"type":699,"value":67},{"data":716,"body":717},{},{"type":692,"children":718},[719],{"type":695,"tag":21,"props":720,"children":721},{},[722,724,729,731,736,738,744],{"type":699,"value":723},"Добавьте флаг ",{"type":695,"tag":24,"props":725,"children":727},{"className":726},[],[728],{"type":699,"value":266},{"type":699,"value":730}," (или ",{"type":695,"tag":24,"props":732,"children":734},{"className":733},[],[735],{"type":699,"value":270},{"type":699,"value":737},"), например ",{"type":695,"tag":24,"props":739,"children":741},{"className":740},[],[742],{"type":699,"value":743},"sed -E 's/([a-z]+)@([a-z]+)\\.com/\\1@\\2.org/' file",{"type":699,"value":67},{"data":746,"body":747},{},{"type":692,"children":748},[749],{"type":695,"tag":21,"props":750,"children":751},{},[752,754,760,762,768,770,776],{"type":699,"value":753},"Запишите команды в файл скрипта ",{"type":695,"tag":24,"props":755,"children":757},{"className":756},[],[758],{"type":699,"value":759},".sed",{"type":699,"value":761}," и выполняйте ",{"type":695,"tag":24,"props":763,"children":765},{"className":764},[],[766],{"type":699,"value":767},"sed -f script.sed file",{"type":699,"value":769},", или используйте ",{"type":695,"tag":24,"props":771,"children":773},{"className":772},[],[774],{"type":699,"value":775},"sed -e",{"type":699,"value":777}," для chaining.",{"data":779,"body":780},{},{"type":692,"children":781},[782],{"type":695,"tag":21,"props":783,"children":784},{},[785,786,792,794,799],{"type":699,"value":723},{"type":695,"tag":24,"props":787,"children":789},{"className":788},[],[790],{"type":699,"value":791},"-n",{"type":699,"value":793}," для пошагового просмотра, используйте ",{"type":695,"tag":24,"props":795,"children":797},{"className":796},[],[798],{"type":699,"value":76},{"type":699,"value":800}," (GNU sed) или сначала протестируйте на небольшом фрагменте.",{"data":802,"body":803},{},{"type":692,"children":804},[805],{"type":695,"tag":21,"props":806,"children":807},{},[808,810,816,818,824],{"type":699,"value":809},"Большинство дистрибутивов Linux поставляются с GNU sed. Для установки на Ubuntu/Debian выполните ",{"type":695,"tag":24,"props":811,"children":813},{"className":812},[],[814],{"type":699,"value":815},"sudo apt install sed",{"type":699,"value":817},". На Fedora/Red Hat используйте ",{"type":695,"tag":24,"props":819,"children":821},{"className":820},[],[822],{"type":699,"value":823},"sudo dnf install sed",{"type":699,"value":67},[826],{"id":827,"title":828,"appliesTo":829,"author":11,"body":833,"canonical":622,"code":622,"createdAt":1237,"description":1238,"difficulty":1239,"draft":626,"estimatedTime":1240,"extension":628,"faq":1241,"howToSteps":1254,"howToTotalTime":1264,"image":622,"keywords":1265,"locale":670,"meta":1276,"navigation":147,"path":677,"platform":673,"related":1277,"section":678,"seo":1281,"severity":622,"stem":1282,"summary":1283,"tags":1284,"twitterCreator":622,"twitterSite":622,"type":687,"updatedAt":1237,"__hash__":1287},"content_ru/guides/linux/scripting-automation.md","Полный гайд по автоматизации задач в Linux с помощью скриптов",[8,830,9,831,832],"Ubuntu 24.04","CentOS 8","Python 3.8+",{"type":13,"value":834,"toc":1230},[835,837,840,842,867,869,1017,1019,1156,1158,1189,1191,1224,1227],[16,836,19],{"id":18},[21,838,839],{},"Автоматизация повседневных задач значительно повышает производительность в Linux. С помощью простых скриптов можно заменять ручные операции, такие как копирование файлов, конвертация форматов или отправка уведомлений, на автоматические процессы, которые выполняются по расписанию или по требованию. После завершения этого руководства вы сможете писать скрипты, запускать их вручную и интегрировать в систему планирования задач cron.",[16,841,34],{"id":33},[36,843,844,847,861,864],{},[39,845,846],{},"Интерпретатор Bash (предустановлен в большинстве дистрибутивов Linux)",[39,848,849,850,498,853,856,857,860],{},"Текстовый редактор, например ",[24,851,852],{},"nano",[24,854,855],{},"vim"," (",[24,858,859],{},"sudo apt install nano",")",[39,862,863],{},"Базовое понимание командной строки Linux",[39,865,866],{},"Права на запись в целевую директорию для сохранения скриптов",[16,868,81],{"id":80},[487,870,871,925,981],{},[39,872,873,876,877],{},[42,874,875],{},"Установка необходимых инструментов","\nУбедитесь, что Bash и текстовый редактор доступны:",[94,878,880],{"className":96,"code":879,"language":98,"meta":99,"style":99},"# Проверка версии Bash\nbash --version\n\n# Установка nano (если отсутствует)\nsudo apt update && sudo apt install -y nano\n",[24,881,882,887,894,898,903],{"__ignoreMap":99},[103,883,884],{"class":105,"line":106},[103,885,886],{"class":109},"# Проверка версии Bash\n",[103,888,889,891],{"class":105,"line":113},[103,890,98],{"class":116},[103,892,893],{"class":140}," --version\n",[103,895,896],{"class":105,"line":144},[103,897,148],{"emptyLinePlaceholder":147},[103,899,900],{"class":105,"line":151},[103,901,902],{"class":109},"# Установка nano (если отсутствует)\n",[103,904,905,907,909,911,913,915,917,919,922],{"class":105,"line":157},[103,906,54],{"class":116},[103,908,120],{"class":119},[103,910,123],{"class":119},[103,912,127],{"class":126},[103,914,54],{"class":116},[103,916,120],{"class":119},[103,918,134],{"class":119},[103,920,921],{"class":140}," -y",[103,923,924],{"class":119}," nano\n",[39,926,927,930,931,934,935,947,950,951,969,971,972,556,975,556,978,55],{},[42,928,929],{},"Написание простого скрипта","\nСоздайте файл ",[24,932,933],{},"myscript.sh"," и добавьте shebang и команду для вывода сообщения:",[94,936,938],{"className":96,"code":937,"language":98,"meta":99,"style":99},"nano myscript.sh\n",[24,939,940],{"__ignoreMap":99},[103,941,942,944],{"class":105,"line":106},[103,943,852],{"class":116},[103,945,946],{"class":119}," myscript.sh\n",[948,949],"br",{},"Вставьте следующий контент:",[94,952,954],{"className":96,"code":953,"language":98,"meta":99,"style":99},"#!/bin/bash\necho \"Привет от Linux! Скрипт успешно запущен.\"\n",[24,955,956,961],{"__ignoreMap":99},[103,957,958],{"class":105,"line":106},[103,959,960],{"class":109},"#!/bin/bash\n",[103,962,963,966],{"class":105,"line":113},[103,964,965],{"class":140},"echo",[103,967,968],{"class":119}," \"Привет от Linux! Скрипт успешно запущен.\"\n",[948,970],{},"Сохраните файл (",[24,973,974],{},"Ctrl+O",[24,976,977],{},"Enter",[24,979,980],{},"Ctrl+X",[39,982,983,986,987,1007,1009,1010],{},[42,984,985],{},"Тестирование скрипта","\nСделайте скрипт исполняемым и запустите его:",[94,988,990],{"className":96,"code":989,"language":98,"meta":99,"style":99},"chmod +x myscript.sh\n./myscript.sh\n",[24,991,992,1002],{"__ignoreMap":99},[103,993,994,997,1000],{"class":105,"line":106},[103,995,996],{"class":116},"chmod",[103,998,999],{"class":119}," +x",[103,1001,946],{"class":119},[103,1003,1004],{"class":105,"line":113},[103,1005,1006],{"class":116},"./myscript.sh\n",[948,1008],{},"Ожидаемый вывод:",[94,1011,1015],{"className":1012,"code":1014,"language":699},[1013],"language-text","Привет от Linux! Скрипт успешно запущен.\n",[24,1016,1014],{"__ignoreMap":99},[431,1018],{},[487,1020,1021,1052],{"start":151},[39,1022,1023,1026,1027,1040,1042,1043,1049,1051],{},[42,1024,1025],{},"Планирование с помощью cron","\nЧтобы запускать скрипт каждые 5 минут, откройте таблицу crontab:",[94,1028,1030],{"className":96,"code":1029,"language":98,"meta":99,"style":99},"crontab -e\n",[24,1031,1032],{"__ignoreMap":99},[103,1033,1034,1037],{"class":105,"line":106},[103,1035,1036],{"class":116},"crontab",[103,1038,1039],{"class":140}," -e\n",[948,1041],{},"Добавьте строку:",[94,1044,1047],{"className":1045,"code":1046,"language":699},[1013],"*/5 * * * * /home/user/myscript.sh\n",[24,1048,1046],{"__ignoreMap":99},[948,1050],{},"Сохраните файл. Сервис cron теперь будет запускать скрипт автоматически.",[39,1053,1054,1057,1058,1150,1152,1153,67],{},[42,1055,1056],{},"Расширенные приемы","\nДобавьте переменные, циклы и работу с файлами для более сложной автоматизации:",[94,1059,1061],{"className":96,"code":1060,"language":98,"meta":99,"style":99},"#!/bin/bash\n# Переменная с директорией\nDIR=\"/home/user/data\"\n# Цикл по всем файлам с расширением .log\nfor f in \"$DIR\"/*.log; do\n    # Создание архива для каждого файла\n    mv \"$f\" \"/home/user/archive/$(basename \"$f\".zip)\"\ndone\n",[24,1062,1063,1067,1072,1083,1088,1114,1119,1145],{"__ignoreMap":99},[103,1064,1065],{"class":105,"line":106},[103,1066,960],{"class":109},[103,1068,1069],{"class":105,"line":113},[103,1070,1071],{"class":109},"# Переменная с директорией\n",[103,1073,1074,1077,1080],{"class":105,"line":144},[103,1075,1076],{"class":126},"DIR",[103,1078,1079],{"class":374},"=",[103,1081,1082],{"class":119},"\"/home/user/data\"\n",[103,1084,1085],{"class":105,"line":151},[103,1086,1087],{"class":109},"# Цикл по всем файлам с расширением .log\n",[103,1089,1090,1093,1096,1099,1102,1105,1108,1111],{"class":105,"line":157},[103,1091,1092],{"class":374},"for",[103,1094,1095],{"class":126}," f ",[103,1097,1098],{"class":374},"in",[103,1100,1101],{"class":119}," \"",[103,1103,1104],{"class":126},"$DIR",[103,1106,1107],{"class":119},"\"/*.log",[103,1109,1110],{"class":126},"; ",[103,1112,1113],{"class":374},"do\n",[103,1115,1116],{"class":105,"line":335},[103,1117,1118],{"class":109},"    # Создание архива для каждого файла\n",[103,1120,1121,1124,1126,1129,1132,1135,1138,1140,1142],{"class":105,"line":341},[103,1122,1123],{"class":116},"    mv",[103,1125,1101],{"class":119},[103,1127,1128],{"class":126},"$f",[103,1130,1131],{"class":119},"\"",[103,1133,1134],{"class":119}," \"/home/user/archive/$(",[103,1136,1137],{"class":116},"basename",[103,1139,1101],{"class":119},[103,1141,1128],{"class":126},[103,1143,1144],{"class":119},"\".zip)\"\n",[103,1146,1147],{"class":105,"line":347},[103,1148,1149],{"class":374},"done\n",[948,1151],{},"Проверьте логику, затем установите права ",[24,1154,1155],{},"chmod +x advanced_script.sh",[16,1157,482],{"id":481},[36,1159,1160,1170,1183],{},[39,1161,1162,1165,1166,1169],{},[42,1163,1164],{},"Ручной запуск",": выполните ",[24,1167,1168],{},"./myscript.sh"," и убедитесь в выводе сообщения.",[39,1171,1172,1175,1176,498,1179,1182],{},[42,1173,1174],{},"Cron-задачи",": проверьте ",[24,1177,1178],{},"/var/log/syslog",[24,1180,1181],{},"journalctl -u cron",", чтобы убедиться, что скрипт запускался по расписанию.",[39,1184,1185,1188],{},[42,1186,1187],{},"Расширенный скрипт",": проверьте директорию архива, чтобы убедиться, что файлы переместились как ожидается.",[16,1190,528],{"id":527},[36,1192,1193,1203,1209,1215],{},[39,1194,1195,1198,1199,1202],{},[42,1196,1197],{},"Скрипт не исполняется",": проверьте права (",[24,1200,1201],{},"chmod +x",") и shebang.",[39,1204,1205,1208],{},[42,1206,1207],{},"Cron-задача не сработала",": убедитесь, что путь к скрипту абсолютный и что файл crontab сохранён в правильном редакторе.",[39,1210,1211,1214],{},[42,1212,1213],{},"Цикл обходит файлы",": используйте кавычки вокруг переменных, чтобы избежать проблем с пробелами в именах.",[39,1216,1217,1220,1221,1223],{},[42,1218,1219],{},"Недостаток прав",": используйте ",[24,1222,54],{}," только для необходимых команд, иначе скрипт может не иметь доступа к целевым ресурсам.",[21,1225,1226],{},"Теперь у вас есть полный набор навыков для автоматизации рутинных операций в Linux с помощью скриптов. Экспериментируйте, расширяйте функциональность и найдите способы интегрировать новые скрипты в вашу рабочую среду.",[605,1228,1229],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":99,"searchDepth":113,"depth":113,"links":1231},[1232,1233,1234,1235,1236],{"id":18,"depth":113,"text":19},{"id":33,"depth":113,"text":34},{"id":80,"depth":113,"text":81},{"id":481,"depth":113,"text":482},{"id":527,"depth":113,"text":528},"2026-07-06 09:43:36","Узнайте, как быстро автоматизировать рутинные задачи в Linux с помощью скриптов Bash. Пошаговая инструкция за 10 минут — от создания скрипта до планирования с помощью cron.","medium","10-15 мин",[1242,1245,1248,1251],{"question":1243,"answer":1244},"Как начать писать скрипты, если я новичок в Linux?","Начните с изучения базового синтаксиса Bash, создайте первый простой скрипт с помощью редактора и запустите его. В этом руководстве каждый шаг объясняется пошагово.",{"question":1246,"answer":1247},"Как запланировать выполнение скрипта с помощью cron?","Откройте crontab для редактирования: `crontab -e`. Добавьте строку, например `*/5 * * * * /home/user/myscript.sh`, чтобы запускать скрипт каждые 5 минут, и сохраните файл.",{"question":1249,"answer":1250},"Как отладить скрипт, если он работает не так, как ожидается?","Используйте `set -x` для трассировки, добавьте вывод отладочной информации с помощью `echo`, или запустите скрипт с `bash -x` для пошагового просмотра выполнения.",{"question":1252,"answer":1253},"Что нужно учитывать для безопасности скриптов?","Установите права `chmod 700` для скрипта, избегайте использования `sudo` без необходимости и не храните конфиденциальные данные в редактируемых файлах.",[1255,1257,1259,1261,1262],{"name":875,"text":1256},"Убедитесь, что на вашем Linux-системе установлен интерпретатор Bash (обычно предустановлен). При необходимости установите текстовый редактор, например `nano` (`sudo apt install nano`) или `vim`.",{"name":929,"text":1258},"Создайте файл, например `myscript.sh`, добавьте shebang `#!/bin/bash`, напишите простую команду (например, `echo \"Привет от Linux!\"`), сохраните и выйдите.",{"name":985,"text":1260},"Сделайте скрипт исполняемым (`chmod +x myscript.sh`) и запустите его (`./myscript.sh`). Проверьте вывод, чтобы убедиться, что скрипт работает.",{"name":1025,"text":1247},{"name":1056,"text":1263},"Добавьте переменные, циклы и обработку файлов: например, `for file in *.txt; do mv \"$file\" archived/; done`. Тестирование таких блоков кода так же важно, как и простых скриптов.","PT15M",[1266,1267,1268,1269,1270,1271,1272,1273,1274,1275],"автоматизация скриптов Linux","bash скрипты","создание скриптов","автоматизация задач","cron","shell скриптинг","Linux автоматизация","как написать скрипт Linux","создание скрипта bash","автоматизировать задачи в Linux",{},[1278,1279,1280],"/guides/linux/package-management","/guides/linux/ssh-tunnel","/guides/linux/backup-script",{"title":828,"description":1238},"guides/linux/scripting-automation","В этом руководстве вы научитесь создавать и запускать скрипты для автоматизации повседневных задач в Linux. После выполнения инструкции вы сможете писать простые и сложные скрипты и планировать их выполнение.",[683,1285,1286,685,686],"Shell","Bash","yvK6NaXXJlvrtcfUPInKxV1MJ8uKrjzbexU0CG7swaQ",{"data":1289,"body":1290},{},{"type":692,"children":1291},[1292,1310,1319,1330],{"type":695,"tag":21,"props":1293,"children":1294},{},[1295,1297,1302,1303,1308],{"type":699,"value":1296},"Включите расширенные regex с помощью ",{"type":695,"tag":24,"props":1298,"children":1300},{"className":1299},[],[1301],{"type":699,"value":266},{"type":699,"value":730},{"type":695,"tag":24,"props":1304,"children":1306},{"className":1305},[],[1307],{"type":699,"value":270},{"type":699,"value":1309},"):",{"type":695,"tag":94,"props":1311,"children":1314},{"className":1312,"code":273,"language":98,"meta":99,"style":1313},"language-bash","undefined",[1315],{"type":695,"tag":24,"props":1316,"children":1317},{"__ignoreMap":99},[1318],{"type":699,"value":273},{"type":695,"tag":21,"props":1320,"children":1321},{},[1322,1324,1329],{"type":699,"value":1323},"Команда преобразует номера телефонов в формат ",{"type":695,"tag":24,"props":1325,"children":1327},{"className":1326},[],[1328],{"type":699,"value":294},{"type":699,"value":67},{"type":695,"tag":605,"props":1331,"children":1332},{},[1333],{"type":699,"value":99},{"data":1335,"body":1336},{},{"type":692,"children":1337},[1338,1351,1360,1365,1372],{"type":695,"tag":21,"props":1339,"children":1340},{},[1341,1343,1349],{"type":699,"value":1342},"Создайте файл ",{"type":695,"tag":24,"props":1344,"children":1346},{"className":1345},[],[1347],{"type":699,"value":1348},"transform.sed",{"type":699,"value":1350}," со следующими правилами:",{"type":695,"tag":94,"props":1352,"children":1355},{"className":1353,"code":1354,"language":26,"meta":99,"style":1313},"language-sed","# Удалить пустые строки\ns/\\n//\n# Заменить все заглавные буквы на строчные\ntolower\n# Добавить окончание файла, если отсутствует\n$ a\\\n# EOF\n",[1356],{"type":695,"tag":24,"props":1357,"children":1358},{"__ignoreMap":99},[1359],{"type":699,"value":1354},{"type":695,"tag":21,"props":1361,"children":1362},{},[1363],{"type":699,"value":1364},"Выполните скрипт командой:",{"type":695,"tag":94,"props":1366,"children":1367},{"className":1312,"code":356,"language":98,"meta":99,"style":1313},[1368],{"type":695,"tag":24,"props":1369,"children":1370},{"__ignoreMap":99},[1371],{"type":699,"value":356},{"type":695,"tag":605,"props":1373,"children":1374},{},[1375],{"type":699,"value":99},{"data":1377,"body":1378},{},{"type":692,"children":1379},[1380,1391,1399,1427],{"type":695,"tag":21,"props":1381,"children":1382},{},[1383,1385,1390],{"type":699,"value":1384},"Для безопасной обработки большого количества файлов используйте ",{"type":695,"tag":24,"props":1386,"children":1388},{"className":1387},[],[1389],{"type":699,"value":388},{"type":699,"value":187},{"type":695,"tag":94,"props":1392,"children":1394},{"className":1312,"code":1393,"language":98,"meta":99,"style":1313},"cat list.txt | xargs -I {} sed -i 's/deprecated/removed/g' {}\n",[1395],{"type":695,"tag":24,"props":1396,"children":1397},{"__ignoreMap":99},[1398],{"type":699,"value":1393},{"type":695,"tag":21,"props":1400,"children":1401},{},[1402,1403,1409,1411,1417,1419,1425],{"type":699,"value":425},{"type":695,"tag":24,"props":1404,"children":1406},{"className":1405},[],[1407],{"type":699,"value":1408},"list.txt",{"type":699,"value":1410}," и заменяет ",{"type":695,"tag":24,"props":1412,"children":1414},{"className":1413},[],[1415],{"type":699,"value":1416},"deprecated",{"type":699,"value":1418}," на ",{"type":695,"tag":24,"props":1420,"children":1422},{"className":1421},[],[1423],{"type":699,"value":1424},"removed",{"type":699,"value":1426}," во всех них.",{"type":695,"tag":605,"props":1428,"children":1429},{},[1430],{"type":699,"value":99},{"data":1432,"body":1433},{},{"type":692,"children":1434},[1435,1447,1455,1460],{"type":695,"tag":21,"props":1436,"children":1437},{},[1438,1440,1445],{"type":699,"value":1439},"Проверьте изменения, используя ",{"type":695,"tag":24,"props":1441,"children":1443},{"className":1442},[],[1444],{"type":699,"value":470},{"type":699,"value":1446}," или просмотрев первые строки изменённых файлов:",{"type":695,"tag":94,"props":1448,"children":1450},{"className":1312,"code":1449,"language":98,"meta":99,"style":1313},"sed -n '1,10p' modified_file.txt\n",[1451],{"type":695,"tag":24,"props":1452,"children":1453},{"__ignoreMap":99},[1454],{"type":699,"value":1449},{"type":695,"tag":21,"props":1456,"children":1457},{},[1458],{"type":699,"value":1459},"Если результат соответствует ожиданиям, изменения успешно применены.",{"type":695,"tag":605,"props":1461,"children":1462},{},[1463],{"type":699,"value":99},{"data":1465,"body":1466},{},{"type":692,"children":1467},[1468,1473,1480,1492],{"type":695,"tag":21,"props":1469,"children":1470},{},[1471],{"type":699,"value":1472},"Чтобы заменить строку во всех текстовых файлах каталога, выполните:",{"type":695,"tag":94,"props":1474,"children":1475},{"className":1312,"code":190,"language":98,"meta":99,"style":1313},[1476],{"type":695,"tag":24,"props":1477,"children":1478},{"__ignoreMap":99},[1479],{"type":699,"value":190},{"type":695,"tag":21,"props":1481,"children":1482},{},[1483,1485,1490],{"type":699,"value":1484},"Эта команда рекурсивно ищет файлы с расширением ",{"type":695,"tag":24,"props":1486,"children":1488},{"className":1487},[],[1489],{"type":699,"value":234},{"type":699,"value":1491}," и применяет замену в каждом из них.",{"type":695,"tag":605,"props":1493,"children":1494},{},[1495],{"type":699,"value":99}]