[{"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--5vkfno-key":1708,"mdc--a7tmdm-key":1742,"mdc-5fnwfn-key":1786,"mdc-gecekh-key":1828,"mdc--ip6gst-key":1883},{"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,1249],{"id":827,"title":828,"appliesTo":829,"author":11,"body":833,"canonical":622,"code":622,"createdAt":1196,"description":1197,"difficulty":1198,"draft":626,"estimatedTime":1199,"extension":628,"faq":1200,"howToSteps":1210,"howToTotalTime":661,"image":622,"keywords":1226,"locale":670,"meta":1237,"navigation":147,"path":676,"platform":673,"related":1238,"section":678,"seo":1241,"severity":622,"stem":1242,"summary":1243,"tags":1244,"twitterCreator":622,"twitterSite":622,"type":687,"updatedAt":1196,"__hash__":1248},"content_ru/guides/linux/awk-advanced.md","Продвинутый гайд по AWK в Linux — команды, скрипты и советы",[8,830,831,832],"Debian 12","Fedora 38","openSUSE Leap 15.5",{"type":13,"value":834,"toc":1183},[835,837,840,842,857,860,872,875,943,945,947,951,955,959,963,967,969,972,1135,1137,1180],[16,836,19],{"id":18},[21,838,839],{},"AWK — это мощный язык для обработки текста, встроенный в большинство дистрибутивов Linux. Хотя базовые команды позволяют быстро фильтровать и преобразовывать данные, продвинутые возможности раскрывают огромный потенциал для автоматизации и анализа логов. В этом гайде вы узнаете, как использовать сложные шаблоны, многомерные массивы, пользовательские функции и интегрировать AWK в пайплайны. После выполнения шагов вы сможете писать сложные скрипты и значительно ускорить свою работу с текстовыми данными.",[16,841,34],{"id":33},[36,843,844,851,854],{},[39,845,846,847,850],{},"Установленный ",[42,848,849],{},"gawk"," (GNU AWK) версии 4.0 или выше.",[39,852,853],{},"Базовые знания синтаксиса AWK (переменные, циклы, условные операторы).",[39,855,856],{},"Доступ к терминалу с правами чтения/записи в целевых файлах.",[21,858,859],{},"Вы можете проверить версию с помощью:",[94,861,863],{"className":96,"code":862,"language":98,"meta":99,"style":99},"gawk --version\n",[24,864,865],{"__ignoreMap":99},[103,866,867,869],{"class":105,"line":106},[103,868,849],{"class":116},[103,870,871],{"class":140}," --version\n",[21,873,874],{},"Если AWK отсутствует, установите его для вашей дистрибутивы:",[94,876,878],{"className":96,"code":877,"language":98,"meta":99,"style":99},"# Ubuntu/Debian\nsudo apt update && sudo apt install gawk\n\n# Fedora/RHEL\nsudo dnf install gawk\n\n# openSUSE\nsudo zypper install gawk\n",[24,879,880,885,904,908,913,923,927,932],{"__ignoreMap":99},[103,881,882],{"class":105,"line":106},[103,883,884],{"class":109},"# Ubuntu/Debian\n",[103,886,887,889,891,893,895,897,899,901],{"class":105,"line":113},[103,888,54],{"class":116},[103,890,120],{"class":119},[103,892,123],{"class":119},[103,894,127],{"class":126},[103,896,54],{"class":116},[103,898,120],{"class":119},[103,900,134],{"class":119},[103,902,903],{"class":119}," gawk\n",[103,905,906],{"class":105,"line":144},[103,907,148],{"emptyLinePlaceholder":147},[103,909,910],{"class":105,"line":151},[103,911,912],{"class":109},"# Fedora/RHEL\n",[103,914,915,917,919,921],{"class":105,"line":157},[103,916,54],{"class":116},[103,918,162],{"class":119},[103,920,134],{"class":119},[103,922,903],{"class":119},[103,924,925],{"class":105,"line":335},[103,926,148],{"emptyLinePlaceholder":147},[103,928,929],{"class":105,"line":341},[103,930,931],{"class":109},"# openSUSE\n",[103,933,934,936,939,941],{"class":105,"line":347},[103,935,54],{"class":116},[103,937,938],{"class":119}," zypper",[103,940,134],{"class":119},[103,942,903],{"class":119},[431,944],{},[16,946,81],{"id":80},[83,948,950],{"id":949},"шаг-1-установка-и-проверка-версии","Шаг 1: Установка и проверка версии",[83,952,954],{"id":953},"шаг-2-продвинутые-шаблоны-и-регулярные-выражения","Шаг 2: Продвинутые шаблоны и регулярные выражения",[83,956,958],{"id":957},"шаг-3-работа-с-многомерными-массивами","Шаг 3: Работа с многомерными массивами",[83,960,962],{"id":961},"шаг-4-определение-пользовательских-функций","Шаг 4: Определение пользовательских функций",[83,964,966],{"id":965},"шаг-5-интеграция-в-пайплайны-и-оптимизация","Шаг 5: Интеграция в пайплайны и оптимизация",[16,968,482],{"id":481},[21,970,971],{},"После выполнения всех шагов проверьте работоспособность:",[487,973,974,999,1053,1082],{},[39,975,976,979,980,995,998],{},[42,977,978],{},"Продвинутые шаблоны"," — запустите простой скрипт:",[94,981,983],{"className":96,"code":982,"language":98,"meta":99,"style":99},"gawk '/error/ && $2 == \"critical\" {print NR, $0}' logfile.txt\n",[24,984,985],{"__ignoreMap":99},[103,986,987,989,992],{"class":105,"line":106},[103,988,849],{"class":116},[103,990,991],{"class":119}," '/error/ && $2 == \"critical\" {print NR, $0}'",[103,993,994],{"class":119}," logfile.txt\n",[996,997],"br",{},"Если записи с критическими ошибками выводятся, шаблоны работают.",[39,1000,1001,1004,1005,1050,1052],{},[42,1002,1003],{},"Многомерные массивы"," — используйте скрипт:",[94,1006,1008],{"className":96,"code":1007,"language":98,"meta":99,"style":99},"gawk '{\n    key = $1\",\"$2;\n    arr[key] = $3;\n}\nEND {\n    for (k in arr) print k, arr[k];\n}' data.txt\n",[24,1009,1010,1017,1022,1027,1032,1037,1042],{"__ignoreMap":99},[103,1011,1012,1014],{"class":105,"line":106},[103,1013,849],{"class":116},[103,1015,1016],{"class":119}," '{\n",[103,1018,1019],{"class":105,"line":113},[103,1020,1021],{"class":119},"    key = $1\",\"$2;\n",[103,1023,1024],{"class":105,"line":144},[103,1025,1026],{"class":119},"    arr[key] = $3;\n",[103,1028,1029],{"class":105,"line":151},[103,1030,1031],{"class":119},"}\n",[103,1033,1034],{"class":105,"line":157},[103,1035,1036],{"class":119},"END {\n",[103,1038,1039],{"class":105,"line":335},[103,1040,1041],{"class":119},"    for (k in arr) print k, arr[k];\n",[103,1043,1044,1047],{"class":105,"line":341},[103,1045,1046],{"class":119},"}'",[103,1048,1049],{"class":119}," data.txt\n",[996,1051],{},"Проверьте вывод на корректные composite ключи.",[39,1054,1055,1058,1059,1079,1081],{},[42,1056,1057],{},"Пользовательские функции"," — выполните:",[94,1060,1062],{"className":96,"code":1061,"language":98,"meta":99,"style":99},"gawk 'function trim(s) { sub(/^[ \\t]+/, \"\", s); sub(/[ \\t]+$/, \"\", s); return s }\n     { print \"[\" trim($0) \"]\" }' sample.txt\n",[24,1063,1064,1071],{"__ignoreMap":99},[103,1065,1066,1068],{"class":105,"line":106},[103,1067,849],{"class":116},[103,1069,1070],{"class":119}," 'function trim(s) { sub(/^[ \\t]+/, \"\", s); sub(/[ \\t]+$/, \"\", s); return s }\n",[103,1072,1073,1076],{"class":105,"line":113},[103,1074,1075],{"class":119},"     { print \"[\" trim($0) \"]\" }'",[103,1077,1078],{"class":119}," sample.txt\n",[996,1080],{},"Каждая строка должна быть заключена в квадратные скобки без лишних пробелов.",[39,1083,1084,1087,1088,1128,1130,1131,1134],{},[42,1085,1086],{},"Пайплайны"," — объедините инструменты:",[94,1089,1091],{"className":96,"code":1090,"language":98,"meta":99,"style":99},"cat data.txt | sed 's/; /;/g' | gawk 'BEGIN { FS=OFS=\";\" } { $3 = toupper($3); print }' | sort -u > result.txt\n",[24,1092,1093],{"__ignoreMap":99},[103,1094,1095,1097,1100,1102,1104,1107,1109,1112,1115,1117,1120,1123,1125],{"class":105,"line":106},[103,1096,398],{"class":116},[103,1098,1099],{"class":119}," data.txt",[103,1101,404],{"class":374},[103,1103,137],{"class":116},[103,1105,1106],{"class":119}," 's/; /;/g'",[103,1108,404],{"class":374},[103,1110,1111],{"class":116}," gawk",[103,1113,1114],{"class":119}," 'BEGIN { FS=OFS=\";\" } { $3 = toupper($3); print }'",[103,1116,404],{"class":374},[103,1118,1119],{"class":116}," sort",[103,1121,1122],{"class":140}," -u",[103,1124,375],{"class":374},[103,1126,1127],{"class":119}," result.txt\n",[996,1129],{},"Файл ",[24,1132,1133],{},"result.txt"," должен содержать уникальные преобразованные строки.",[16,1136,528],{"id":527},[36,1138,1139,1158,1164,1170],{},[39,1140,1141,1144,1145,556,1148,556,1150,1153,1154,1157],{},[42,1142,1143],{},"Синтаксис регулярных выражений",": AWK использует регулярные выражения, похожие на grep. Если шаблон не срабатывает, проверьте экранирование специальных символов (например, ",[24,1146,1147],{},"*",[24,1149,565],{},[24,1151,1152],{},"?","). Используйте ",[24,1155,1156],{},"awk --lint",", чтобы обнаружить ошибки.",[39,1159,1160,1163],{},[42,1161,1162],{},"Пробелы в composite ключах",": при создании многомерного массива используйте одинаковый разделитель; несоответствие приводит к отсутствию элементов. Убедитесь, что разделитель не встречается в самих данных.",[39,1165,1166,1169],{},[42,1167,1168],{},"Переполнение памяти",": большие ассоциативные массивы могут замедлить скрипт. Если скрипт стал медленным, рассмотрите возможность агрегации данных перед обработкой в AWK или используйте внешние сортировочные инструменты.",[39,1171,1172,1175,1176,1179],{},[42,1173,1174],{},"Отладка пользовательских функций",": добавьте ",[24,1177,1178],{},"BEGIN { debug=1 }"," и выводите промежуточные значения для отладки. После проверки отключите отладку, чтобы избежать лишнего вывода.",[605,1181,1182],{},"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 .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 .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}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 .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":99,"searchDepth":113,"depth":113,"links":1184},[1185,1186,1187,1194,1195],{"id":18,"depth":113,"text":19},{"id":33,"depth":113,"text":34},{"id":80,"depth":113,"text":81,"children":1188},[1189,1190,1191,1192,1193],{"id":949,"depth":144,"text":950},{"id":953,"depth":144,"text":954},{"id":957,"depth":144,"text":958},{"id":961,"depth":144,"text":962},{"id":965,"depth":144,"text":966},{"id":481,"depth":113,"text":482},{"id":527,"depth":113,"text":528},"2026-07-13 08:48:41","Узнайте, как использовать продвинутые функции AWK: сложные шаблоны, массивы и интеграция в пайплайны. Пошаговая инструкция за 15 минут.","medium","15-30 мин",[1201,1204,1207],{"answer":1202,"question":1203},"Используйте `n = asorti(arr)` для индексированных массивов или `n = length(arr)` для ассоциативных массивов, чтобы получить количество элементов.","Как определить размер ассоциативного массива в AWK?",{"answer":1205,"question":1206},"Установите `RS=\"\"` (пустое разделительное выражение) для чтения всего файла как одной записи, затем разделите строки внутри скрипта по `\"\n\"`.","Как обработать многострочные записи в AWK?",{"answer":1208,"question":1209},"Добавьте `BEGIN { debug=1 } /pattern/ { if (debug) print \"DEBUG:\", NR, $0 }'` или используйте `awk --lint` для проверки синтаксиса.","Как отлаживать скрипты AWK?",[1211,1214,1217,1220,1223],{"name":1212,"text":1213},"Установка и проверка версии","Убедитесь, что `gawk` (GNU AWK) установлен. На Debian/Ubuntu выполните `sudo apt install gawk`, на RHEL/Fedora — `sudo dnf install gawk`. Проверьте версию командой `gawk --version`.",{"name":1215,"text":1216},"Продвинутые шаблоны и регулярные выражения","Изучите работу с несколькими паттернами: `if ($0 ~ /error/ && $2 == \"critical\")`. Используйте `match($0, /error([0-9]+)/, m)` для захвата групп и доступа к ним через массив `m`.",{"name":1218,"text":1219},"Работа с многомерными массивами","Создайте массив массивов: `arr[key1,key2] = value`. Получите значение по composite key: `val = arr[key1\",\"key2]`. Для перебора используйте `for (i in arr)`.",{"name":1221,"text":1222},"Определение пользовательских функций","Объявите функцию в начале скрипта: `function trim(s) { sub(/^[ \t]+/, \"\", s); sub(/[ \t]+$/, \"\", s); return s }`. Вызывайте её в теле скрипта: `line = trim($0)`.",{"name":1224,"text":1225},"Интеграция в пайплайны и оптимизация","Комбинируйте AWK с `sed`, `grep` и `sort`. Пример: `sed 's/\\s\\+/ /g' | awk '{print toupper($1)}' | sort -u`. Используйте `awk 'BEGIN { FS=OFS=\",\" }'` для удобной работы с CSV.",[1227,1228,1229,1230,1231,1232,1233,1234,1235,1236],"awk advanced","awk scripting linux","awk multiline patterns","awk associative arrays","awk user-defined functions","awk command line options","awk performance tips","awk debug script","как использовать awk продвинуто","скрипты awk примеры",{},[1239,1240],"/guides/linux/awk-basics","/guides/linux/bash-advanced",{"title":828,"description":1197},"guides/linux/awk-advanced","В этом гайде вы освоите продвинутые возможности AWK в Linux, включая обработку многомерных массивов, пользовательские функции и оптимизацию производительности. После чтения вы сможете писать сложные скрипты и эффективно интегрировать AWK в пайплайны.",[683,1245,1246,1247],"AWK","Programming","Shell scripting","XMXhNrMCRffpe_g3fmuAswkdLK4lu9zkvSrcvvIzhww",{"id":1250,"title":1251,"appliesTo":1252,"author":11,"body":1256,"canonical":622,"code":622,"createdAt":1658,"description":1659,"difficulty":1198,"draft":626,"estimatedTime":1660,"extension":628,"faq":1661,"howToSteps":1674,"howToTotalTime":1684,"image":622,"keywords":1685,"locale":670,"meta":1696,"navigation":147,"path":677,"platform":673,"related":1697,"section":678,"seo":1701,"severity":622,"stem":1702,"summary":1703,"tags":1704,"twitterCreator":622,"twitterSite":622,"type":687,"updatedAt":1658,"__hash__":1707},"content_ru/guides/linux/scripting-automation.md","Полный гайд по автоматизации задач в Linux с помощью скриптов",[8,1253,9,1254,1255],"Ubuntu 24.04","CentOS 8","Python 3.8+",{"type":13,"value":1257,"toc":1651},[1258,1260,1263,1265,1290,1292,1438,1440,1577,1579,1610,1612,1645,1648],[16,1259,19],{"id":18},[21,1261,1262],{},"Автоматизация повседневных задач значительно повышает производительность в Linux. С помощью простых скриптов можно заменять ручные операции, такие как копирование файлов, конвертация форматов или отправка уведомлений, на автоматические процессы, которые выполняются по расписанию или по требованию. После завершения этого руководства вы сможете писать скрипты, запускать их вручную и интегрировать в систему планирования задач cron.",[16,1264,34],{"id":33},[36,1266,1267,1270,1284,1287],{},[39,1268,1269],{},"Интерпретатор Bash (предустановлен в большинстве дистрибутивов Linux)",[39,1271,1272,1273,498,1276,1279,1280,1283],{},"Текстовый редактор, например ",[24,1274,1275],{},"nano",[24,1277,1278],{},"vim"," (",[24,1281,1282],{},"sudo apt install nano",")",[39,1285,1286],{},"Базовое понимание командной строки Linux",[39,1288,1289],{},"Права на запись в целевую директорию для сохранения скриптов",[16,1291,81],{"id":80},[487,1293,1294,1347,1402],{},[39,1295,1296,1299,1300],{},[42,1297,1298],{},"Установка необходимых инструментов","\nУбедитесь, что Bash и текстовый редактор доступны:",[94,1301,1303],{"className":96,"code":1302,"language":98,"meta":99,"style":99},"# Проверка версии Bash\nbash --version\n\n# Установка nano (если отсутствует)\nsudo apt update && sudo apt install -y nano\n",[24,1304,1305,1310,1316,1320,1325],{"__ignoreMap":99},[103,1306,1307],{"class":105,"line":106},[103,1308,1309],{"class":109},"# Проверка версии Bash\n",[103,1311,1312,1314],{"class":105,"line":113},[103,1313,98],{"class":116},[103,1315,871],{"class":140},[103,1317,1318],{"class":105,"line":144},[103,1319,148],{"emptyLinePlaceholder":147},[103,1321,1322],{"class":105,"line":151},[103,1323,1324],{"class":109},"# Установка nano (если отсутствует)\n",[103,1326,1327,1329,1331,1333,1335,1337,1339,1341,1344],{"class":105,"line":157},[103,1328,54],{"class":116},[103,1330,120],{"class":119},[103,1332,123],{"class":119},[103,1334,127],{"class":126},[103,1336,54],{"class":116},[103,1338,120],{"class":119},[103,1340,134],{"class":119},[103,1342,1343],{"class":140}," -y",[103,1345,1346],{"class":119}," nano\n",[39,1348,1349,1352,1353,1356,1357,1369,1371,1372,1390,1392,1393,556,1396,556,1399,55],{},[42,1350,1351],{},"Написание простого скрипта","\nСоздайте файл ",[24,1354,1355],{},"myscript.sh"," и добавьте shebang и команду для вывода сообщения:",[94,1358,1360],{"className":96,"code":1359,"language":98,"meta":99,"style":99},"nano myscript.sh\n",[24,1361,1362],{"__ignoreMap":99},[103,1363,1364,1366],{"class":105,"line":106},[103,1365,1275],{"class":116},[103,1367,1368],{"class":119}," myscript.sh\n",[996,1370],{},"Вставьте следующий контент:",[94,1373,1375],{"className":96,"code":1374,"language":98,"meta":99,"style":99},"#!/bin/bash\necho \"Привет от Linux! Скрипт успешно запущен.\"\n",[24,1376,1377,1382],{"__ignoreMap":99},[103,1378,1379],{"class":105,"line":106},[103,1380,1381],{"class":109},"#!/bin/bash\n",[103,1383,1384,1387],{"class":105,"line":113},[103,1385,1386],{"class":140},"echo",[103,1388,1389],{"class":119}," \"Привет от Linux! Скрипт успешно запущен.\"\n",[996,1391],{},"Сохраните файл (",[24,1394,1395],{},"Ctrl+O",[24,1397,1398],{},"Enter",[24,1400,1401],{},"Ctrl+X",[39,1403,1404,1407,1408,1428,1430,1431],{},[42,1405,1406],{},"Тестирование скрипта","\nСделайте скрипт исполняемым и запустите его:",[94,1409,1411],{"className":96,"code":1410,"language":98,"meta":99,"style":99},"chmod +x myscript.sh\n./myscript.sh\n",[24,1412,1413,1423],{"__ignoreMap":99},[103,1414,1415,1418,1421],{"class":105,"line":106},[103,1416,1417],{"class":116},"chmod",[103,1419,1420],{"class":119}," +x",[103,1422,1368],{"class":119},[103,1424,1425],{"class":105,"line":113},[103,1426,1427],{"class":116},"./myscript.sh\n",[996,1429],{},"Ожидаемый вывод:",[94,1432,1436],{"className":1433,"code":1435,"language":699},[1434],"language-text","Привет от Linux! Скрипт успешно запущен.\n",[24,1437,1435],{"__ignoreMap":99},[431,1439],{},[487,1441,1442,1473],{"start":151},[39,1443,1444,1447,1448,1461,1463,1464,1470,1472],{},[42,1445,1446],{},"Планирование с помощью cron","\nЧтобы запускать скрипт каждые 5 минут, откройте таблицу crontab:",[94,1449,1451],{"className":96,"code":1450,"language":98,"meta":99,"style":99},"crontab -e\n",[24,1452,1453],{"__ignoreMap":99},[103,1454,1455,1458],{"class":105,"line":106},[103,1456,1457],{"class":116},"crontab",[103,1459,1460],{"class":140}," -e\n",[996,1462],{},"Добавьте строку:",[94,1465,1468],{"className":1466,"code":1467,"language":699},[1434],"*/5 * * * * /home/user/myscript.sh\n",[24,1469,1467],{"__ignoreMap":99},[996,1471],{},"Сохраните файл. Сервис cron теперь будет запускать скрипт автоматически.",[39,1474,1475,1478,1479,1571,1573,1574,67],{},[42,1476,1477],{},"Расширенные приемы","\nДобавьте переменные, циклы и работу с файлами для более сложной автоматизации:",[94,1480,1482],{"className":96,"code":1481,"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,1483,1484,1488,1493,1504,1509,1535,1540,1566],{"__ignoreMap":99},[103,1485,1486],{"class":105,"line":106},[103,1487,1381],{"class":109},[103,1489,1490],{"class":105,"line":113},[103,1491,1492],{"class":109},"# Переменная с директорией\n",[103,1494,1495,1498,1501],{"class":105,"line":144},[103,1496,1497],{"class":126},"DIR",[103,1499,1500],{"class":374},"=",[103,1502,1503],{"class":119},"\"/home/user/data\"\n",[103,1505,1506],{"class":105,"line":151},[103,1507,1508],{"class":109},"# Цикл по всем файлам с расширением .log\n",[103,1510,1511,1514,1517,1520,1523,1526,1529,1532],{"class":105,"line":157},[103,1512,1513],{"class":374},"for",[103,1515,1516],{"class":126}," f ",[103,1518,1519],{"class":374},"in",[103,1521,1522],{"class":119}," \"",[103,1524,1525],{"class":126},"$DIR",[103,1527,1528],{"class":119},"\"/*.log",[103,1530,1531],{"class":126},"; ",[103,1533,1534],{"class":374},"do\n",[103,1536,1537],{"class":105,"line":335},[103,1538,1539],{"class":109},"    # Создание архива для каждого файла\n",[103,1541,1542,1545,1547,1550,1553,1556,1559,1561,1563],{"class":105,"line":341},[103,1543,1544],{"class":116},"    mv",[103,1546,1522],{"class":119},[103,1548,1549],{"class":126},"$f",[103,1551,1552],{"class":119},"\"",[103,1554,1555],{"class":119}," \"/home/user/archive/$(",[103,1557,1558],{"class":116},"basename",[103,1560,1522],{"class":119},[103,1562,1549],{"class":126},[103,1564,1565],{"class":119},"\".zip)\"\n",[103,1567,1568],{"class":105,"line":347},[103,1569,1570],{"class":374},"done\n",[996,1572],{},"Проверьте логику, затем установите права ",[24,1575,1576],{},"chmod +x advanced_script.sh",[16,1578,482],{"id":481},[36,1580,1581,1591,1604],{},[39,1582,1583,1586,1587,1590],{},[42,1584,1585],{},"Ручной запуск",": выполните ",[24,1588,1589],{},"./myscript.sh"," и убедитесь в выводе сообщения.",[39,1592,1593,1596,1597,498,1600,1603],{},[42,1594,1595],{},"Cron-задачи",": проверьте ",[24,1598,1599],{},"/var/log/syslog",[24,1601,1602],{},"journalctl -u cron",", чтобы убедиться, что скрипт запускался по расписанию.",[39,1605,1606,1609],{},[42,1607,1608],{},"Расширенный скрипт",": проверьте директорию архива, чтобы убедиться, что файлы переместились как ожидается.",[16,1611,528],{"id":527},[36,1613,1614,1624,1630,1636],{},[39,1615,1616,1619,1620,1623],{},[42,1617,1618],{},"Скрипт не исполняется",": проверьте права (",[24,1621,1622],{},"chmod +x",") и shebang.",[39,1625,1626,1629],{},[42,1627,1628],{},"Cron-задача не сработала",": убедитесь, что путь к скрипту абсолютный и что файл crontab сохранён в правильном редакторе.",[39,1631,1632,1635],{},[42,1633,1634],{},"Цикл обходит файлы",": используйте кавычки вокруг переменных, чтобы избежать проблем с пробелами в именах.",[39,1637,1638,1641,1642,1644],{},[42,1639,1640],{},"Недостаток прав",": используйте ",[24,1643,54],{}," только для необходимых команд, иначе скрипт может не иметь доступа к целевым ресурсам.",[21,1646,1647],{},"Теперь у вас есть полный набор навыков для автоматизации рутинных операций в Linux с помощью скриптов. Экспериментируйте, расширяйте функциональность и найдите способы интегрировать новые скрипты в вашу рабочую среду.",[605,1649,1650],{},"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":1652},[1653,1654,1655,1656,1657],{"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.","10-15 мин",[1662,1665,1668,1671],{"question":1663,"answer":1664},"Как начать писать скрипты, если я новичок в Linux?","Начните с изучения базового синтаксиса Bash, создайте первый простой скрипт с помощью редактора и запустите его. В этом руководстве каждый шаг объясняется пошагово.",{"question":1666,"answer":1667},"Как запланировать выполнение скрипта с помощью cron?","Откройте crontab для редактирования: `crontab -e`. Добавьте строку, например `*/5 * * * * /home/user/myscript.sh`, чтобы запускать скрипт каждые 5 минут, и сохраните файл.",{"question":1669,"answer":1670},"Как отладить скрипт, если он работает не так, как ожидается?","Используйте `set -x` для трассировки, добавьте вывод отладочной информации с помощью `echo`, или запустите скрипт с `bash -x` для пошагового просмотра выполнения.",{"question":1672,"answer":1673},"Что нужно учитывать для безопасности скриптов?","Установите права `chmod 700` для скрипта, избегайте использования `sudo` без необходимости и не храните конфиденциальные данные в редактируемых файлах.",[1675,1677,1679,1681,1682],{"name":1298,"text":1676},"Убедитесь, что на вашем Linux-системе установлен интерпретатор Bash (обычно предустановлен). При необходимости установите текстовый редактор, например `nano` (`sudo apt install nano`) или `vim`.",{"name":1351,"text":1678},"Создайте файл, например `myscript.sh`, добавьте shebang `#!/bin/bash`, напишите простую команду (например, `echo \"Привет от Linux!\"`), сохраните и выйдите.",{"name":1406,"text":1680},"Сделайте скрипт исполняемым (`chmod +x myscript.sh`) и запустите его (`./myscript.sh`). Проверьте вывод, чтобы убедиться, что скрипт работает.",{"name":1446,"text":1667},{"name":1477,"text":1683},"Добавьте переменные, циклы и обработку файлов: например, `for file in *.txt; do mv \"$file\" archived/; done`. Тестирование таких блоков кода так же важно, как и простых скриптов.","PT15M",[1686,1687,1688,1689,1690,1691,1692,1693,1694,1695],"автоматизация скриптов Linux","bash скрипты","создание скриптов","автоматизация задач","cron","shell скриптинг","Linux автоматизация","как написать скрипт Linux","создание скрипта bash","автоматизировать задачи в Linux",{},[1698,1699,1700],"/guides/linux/package-management","/guides/linux/ssh-tunnel","/guides/linux/backup-script",{"title":1251,"description":1659},"guides/linux/scripting-automation","В этом руководстве вы научитесь создавать и запускать скрипты для автоматизации повседневных задач в Linux. После выполнения инструкции вы сможете писать простые и сложные скрипты и планировать их выполнение.",[683,1705,1706,685,686],"Shell","Bash","yvK6NaXXJlvrtcfUPInKxV1MJ8uKrjzbexU0CG7swaQ",{"data":1709,"body":1710},{},{"type":692,"children":1711},[1712,1717,1726,1738],{"type":695,"tag":21,"props":1713,"children":1714},{},[1715],{"type":699,"value":1716},"Чтобы заменить строку во всех текстовых файлах каталога, выполните:",{"type":695,"tag":94,"props":1718,"children":1721},{"className":1719,"code":190,"language":98,"meta":99,"style":1720},"language-bash","undefined",[1722],{"type":695,"tag":24,"props":1723,"children":1724},{"__ignoreMap":99},[1725],{"type":699,"value":190},{"type":695,"tag":21,"props":1727,"children":1728},{},[1729,1731,1736],{"type":699,"value":1730},"Эта команда рекурсивно ищет файлы с расширением ",{"type":695,"tag":24,"props":1732,"children":1734},{"className":1733},[],[1735],{"type":699,"value":234},{"type":699,"value":1737}," и применяет замену в каждом из них.",{"type":695,"tag":605,"props":1739,"children":1740},{},[1741],{"type":699,"value":99},{"data":1743,"body":1744},{},{"type":692,"children":1745},[1746,1764,1771,1782],{"type":695,"tag":21,"props":1747,"children":1748},{},[1749,1751,1756,1757,1762],{"type":699,"value":1750},"Включите расширенные regex с помощью ",{"type":695,"tag":24,"props":1752,"children":1754},{"className":1753},[],[1755],{"type":699,"value":266},{"type":699,"value":730},{"type":695,"tag":24,"props":1758,"children":1760},{"className":1759},[],[1761],{"type":699,"value":270},{"type":699,"value":1763},"):",{"type":695,"tag":94,"props":1765,"children":1766},{"className":1719,"code":273,"language":98,"meta":99,"style":1720},[1767],{"type":695,"tag":24,"props":1768,"children":1769},{"__ignoreMap":99},[1770],{"type":699,"value":273},{"type":695,"tag":21,"props":1772,"children":1773},{},[1774,1776,1781],{"type":699,"value":1775},"Команда преобразует номера телефонов в формат ",{"type":695,"tag":24,"props":1777,"children":1779},{"className":1778},[],[1780],{"type":699,"value":294},{"type":699,"value":67},{"type":695,"tag":605,"props":1783,"children":1784},{},[1785],{"type":699,"value":99},{"data":1787,"body":1788},{},{"type":692,"children":1789},[1790,1803,1812,1817,1824],{"type":695,"tag":21,"props":1791,"children":1792},{},[1793,1795,1801],{"type":699,"value":1794},"Создайте файл ",{"type":695,"tag":24,"props":1796,"children":1798},{"className":1797},[],[1799],{"type":699,"value":1800},"transform.sed",{"type":699,"value":1802}," со следующими правилами:",{"type":695,"tag":94,"props":1804,"children":1807},{"className":1805,"code":1806,"language":26,"meta":99,"style":1720},"language-sed","# Удалить пустые строки\ns/\\n//\n# Заменить все заглавные буквы на строчные\ntolower\n# Добавить окончание файла, если отсутствует\n$ a\\\n# EOF\n",[1808],{"type":695,"tag":24,"props":1809,"children":1810},{"__ignoreMap":99},[1811],{"type":699,"value":1806},{"type":695,"tag":21,"props":1813,"children":1814},{},[1815],{"type":699,"value":1816},"Выполните скрипт командой:",{"type":695,"tag":94,"props":1818,"children":1819},{"className":1719,"code":356,"language":98,"meta":99,"style":1720},[1820],{"type":695,"tag":24,"props":1821,"children":1822},{"__ignoreMap":99},[1823],{"type":699,"value":356},{"type":695,"tag":605,"props":1825,"children":1826},{},[1827],{"type":699,"value":99},{"data":1829,"body":1830},{},{"type":692,"children":1831},[1832,1843,1851,1879],{"type":695,"tag":21,"props":1833,"children":1834},{},[1835,1837,1842],{"type":699,"value":1836},"Для безопасной обработки большого количества файлов используйте ",{"type":695,"tag":24,"props":1838,"children":1840},{"className":1839},[],[1841],{"type":699,"value":388},{"type":699,"value":187},{"type":695,"tag":94,"props":1844,"children":1846},{"className":1719,"code":1845,"language":98,"meta":99,"style":1720},"cat list.txt | xargs -I {} sed -i 's/deprecated/removed/g' {}\n",[1847],{"type":695,"tag":24,"props":1848,"children":1849},{"__ignoreMap":99},[1850],{"type":699,"value":1845},{"type":695,"tag":21,"props":1852,"children":1853},{},[1854,1855,1861,1863,1869,1871,1877],{"type":699,"value":425},{"type":695,"tag":24,"props":1856,"children":1858},{"className":1857},[],[1859],{"type":699,"value":1860},"list.txt",{"type":699,"value":1862}," и заменяет ",{"type":695,"tag":24,"props":1864,"children":1866},{"className":1865},[],[1867],{"type":699,"value":1868},"deprecated",{"type":699,"value":1870}," на ",{"type":695,"tag":24,"props":1872,"children":1874},{"className":1873},[],[1875],{"type":699,"value":1876},"removed",{"type":699,"value":1878}," во всех них.",{"type":695,"tag":605,"props":1880,"children":1881},{},[1882],{"type":699,"value":99},{"data":1884,"body":1885},{},{"type":692,"children":1886},[1887,1899,1907,1912],{"type":695,"tag":21,"props":1888,"children":1889},{},[1890,1892,1897],{"type":699,"value":1891},"Проверьте изменения, используя ",{"type":695,"tag":24,"props":1893,"children":1895},{"className":1894},[],[1896],{"type":699,"value":470},{"type":699,"value":1898}," или просмотрев первые строки изменённых файлов:",{"type":695,"tag":94,"props":1900,"children":1902},{"className":1719,"code":1901,"language":98,"meta":99,"style":1720},"sed -n '1,10p' modified_file.txt\n",[1903],{"type":695,"tag":24,"props":1904,"children":1905},{"__ignoreMap":99},[1906],{"type":699,"value":1901},{"type":695,"tag":21,"props":1908,"children":1909},{},[1910],{"type":699,"value":1911},"Если результат соответствует ожиданиям, изменения успешно применены.",{"type":695,"tag":605,"props":1913,"children":1914},{},[1915],{"type":699,"value":99}]