[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"page-ru-/guides/linux/linux-text-processing-awk-sed":3,"mdc--11dydc-key":709,"mdc--bcuvb7-key":720,"mdc--nudgqc-key":752,"mdc--b3iehl-key":760,"related-/guides/linux/linux-text-processing-awk,/guides/linux/linux-text-processing-sed,/guides/linux/linux-shell-scripting-basics":809,"mdc--14d910-key":1574,"mdc--liuj5v-key":1617,"mdc--3oo3jo-key":1655,"mdc--z62xjp-key":1682,"mdc--7taktu-key":1735},{"id":4,"title":5,"appliesTo":6,"author":10,"body":11,"canonical":643,"code":80,"createdAt":644,"description":645,"difficulty":646,"draft":647,"estimatedTime":648,"extension":649,"faq":650,"howToSteps":660,"howToTotalTime":679,"image":643,"keywords":680,"locale":689,"meta":690,"navigation":117,"path":691,"platform":692,"related":693,"section":697,"seo":698,"severity":80,"stem":699,"summary":700,"tags":701,"twitterCreator":643,"twitterSite":643,"type":707,"updatedAt":644,"__hash__":708},"content_ru/guides/linux/linux-text-processing-awk-sed.md","Обработка текста в Linux с помощью AWK и SED — пошаговое руководство",[7,8,9],"Ubuntu 22.04","Debian 12","CentOS 8","FixPedia Team",{"type":12,"value":13,"toc":629},"minimark",[14,19,32,36,71,74,139,143,148,151,170,173,177,180,220,237,241,244,281,285,288,310,313,316,320,323,343,354,358,361,410,425,429,432,469,473,622,625],[15,16,18],"h2",{"id":17},"введение-зачем-это-нужно","Введение / Зачем это нужно",[20,21,22,23,27,28,31],"p",{},"Обработка текста — повседневная задача для системных администраторов и разработчиков. Linux предоставляет два мощных инструмента для работы с текстом: ",[24,25,26],"strong",{},"AWK"," и ",[24,29,30],{},"SED",". AWK excels в анализе полей и вычислениях, а SED shines в быстром редактировании строк. В этом гайде вы узнаете, как использовать обе утилиты для массового редактирования, фильтрации и преобразования файлов. После выполнения инструкции вы сможете автоматизировать повседневные операции с текстом с помощью простых команд в терминале.",[15,33,35],{"id":34},"требования-подготовка","Требования / Подготовка",[37,38,39,43,46,57],"ul",{},[40,41,42],"li",{},"Дистрибутив Linux (Ubuntu, Debian, CentOS и другие).",[40,44,45],{},"Доступ к терминалу с правами чтения/записи в целевых каталогах.",[40,47,48,49,27,53,56],{},"Утилиты ",[50,51,52],"code",{},"awk",[50,54,55],{},"sed"," (обычно уже установлены).",[40,58,59,60,63,64,63,67,70],{},"Пример файлов для практики: ",[50,61,62],{},"log.txt",", ",[50,65,66],{},"data.txt",[50,68,69],{},"input.txt",".",[20,72,73],{},"Если какие-то утилиты отсутствуют, установите их:",[75,76,81],"pre",{"className":77,"code":78,"language":79,"meta":80,"style":80},"language-bash shiki shiki-themes github-light github-dark","# Для Debian/Ubuntu\nsudo apt-get install gawk sed\n\n# Для CentOS/RHEL\nsudo yum install gawk sed\n","bash","",[50,82,83,92,112,119,125],{"__ignoreMap":80},[84,85,88],"span",{"class":86,"line":87},"line",1,[84,89,91],{"class":90},"sJ8bj","# Для Debian/Ubuntu\n",[84,93,95,99,103,106,109],{"class":86,"line":94},2,[84,96,98],{"class":97},"sScJk","sudo",[84,100,102],{"class":101},"sZZnC"," apt-get",[84,104,105],{"class":101}," install",[84,107,108],{"class":101}," gawk",[84,110,111],{"class":101}," sed\n",[84,113,115],{"class":86,"line":114},3,[84,116,118],{"emptyLinePlaceholder":117},true,"\n",[84,120,122],{"class":86,"line":121},4,[84,123,124],{"class":90},"# Для CentOS/RHEL\n",[84,126,128,130,133,135,137],{"class":86,"line":127},5,[84,129,98],{"class":97},[84,131,132],{"class":101}," yum",[84,134,105],{"class":101},[84,136,108],{"class":101},[84,138,111],{"class":101},[15,140,142],{"id":141},"пошаговая-инструкция","Пошаговая инструкция",[144,145,147],"h3",{"id":146},"шаг-1-установите-необходимые-инструменты","Шаг 1: Установите необходимые инструменты",[20,149,150],{},"Проверьте, что инструменты уже присутствуют:",[75,152,154],{"className":77,"code":153,"language":79,"meta":80,"style":80},"awk --version\nsed --version\n",[50,155,156,164],{"__ignoreMap":80},[84,157,158,160],{"class":86,"line":87},[84,159,52],{"class":97},[84,161,163],{"class":162},"sj4cs"," --version\n",[84,165,166,168],{"class":86,"line":94},[84,167,55],{"class":97},[84,169,163],{"class":162},[20,171,172],{},"Если вывод показывает версию, вы готовы продолжать. В противном случае установите пакеты, как описано выше.",[144,174,176],{"id":175},"шаг-2-замена-текста-с-помощью-sed","Шаг 2: Замена текста с помощью sed",[20,178,179],{},"SED — идеальный выбор для быстрой замены текста.",[75,181,183],{"className":77,"code":182,"language":79,"meta":80,"style":80},"# Редактирует файл напрямую\nsed -i 's/error/ok/g' log.txt\n\n# Показать результат без изменения исходного файла\nsed 's/error/ok/g' log.txt\n",[50,184,185,190,203,207,212],{"__ignoreMap":80},[84,186,187],{"class":86,"line":87},[84,188,189],{"class":90},"# Редактирует файл напрямую\n",[84,191,192,194,197,200],{"class":86,"line":94},[84,193,55],{"class":97},[84,195,196],{"class":162}," -i",[84,198,199],{"class":101}," 's/error/ok/g'",[84,201,202],{"class":101}," log.txt\n",[84,204,205],{"class":86,"line":114},[84,206,118],{"emptyLinePlaceholder":117},[84,208,209],{"class":86,"line":121},[84,210,211],{"class":90},"# Показать результат без изменения исходного файла\n",[84,213,214,216,218],{"class":86,"line":127},[84,215,55],{"class":97},[84,217,199],{"class":101},[84,219,202],{"class":101},[221,222,223],"blockquote",{},[20,224,225,228,229,232,233,236],{},[24,226,227],{},"💡 Совет:"," Флаг ",[50,230,231],{},"-i"," редактирует файл на месте. На macOS синтаксис может отличаться (",[50,234,235],{},"sed -i ''","). Проверьтеman-page, если команда работает некорректно.",[144,238,240],{"id":239},"шаг-3-фильтрация-строк-с-помощью-awk","Шаг 3: Фильтрация строк с помощью awk",[20,242,243],{},"AWK позволяет фильтровать строки на основе шаблонов или значений полей.",[75,245,247],{"className":77,"code":246,"language":79,"meta":80,"style":80},"# Вывести только строки, содержащие слово warning\nawk '/warning/ {print}' log.txt\n\n# Вывести строку вместе с номером строки\nawk '/warning/ {print NR \": \" $0}' log.txt\n",[50,248,249,254,263,267,272],{"__ignoreMap":80},[84,250,251],{"class":86,"line":87},[84,252,253],{"class":90},"# Вывести только строки, содержащие слово warning\n",[84,255,256,258,261],{"class":86,"line":94},[84,257,52],{"class":97},[84,259,260],{"class":101}," '/warning/ {print}'",[84,262,202],{"class":101},[84,264,265],{"class":86,"line":114},[84,266,118],{"emptyLinePlaceholder":117},[84,268,269],{"class":86,"line":121},[84,270,271],{"class":90},"# Вывести строку вместе с номером строки\n",[84,273,274,276,279],{"class":86,"line":127},[84,275,52],{"class":97},[84,277,278],{"class":101}," '/warning/ {print NR \": \" $0}'",[84,280,202],{"class":101},[144,282,284],{"id":283},"шаг-4-удаление-пустых-строк-с-помощью-sed","Шаг 4: Удаление пустых строк с помощью sed",[20,286,287],{},"Удалите все пустые строки и сохраните результат:",[75,289,291],{"className":77,"code":290,"language":79,"meta":80,"style":80},"sed '/^$/d' data.txt > cleaned.txt\n",[50,292,293],{"__ignoreMap":80},[84,294,295,297,300,303,307],{"class":86,"line":87},[84,296,55],{"class":97},[84,298,299],{"class":101}," '/^$/d'",[84,301,302],{"class":101}," data.txt",[84,304,306],{"class":305},"szBVR"," >",[84,308,309],{"class":101}," cleaned.txt\n",[311,312],"in-article-ad",{},[20,314,315],{},":",[144,317,319],{"id":318},"шаг-5-комбинированный-пример-фильтрация-и-замена","Шаг 5: Комбинированный пример: фильтрация и замена",[20,321,322],{},"Выполните сразу несколько операций: фильтрация, замена и запись в новый файл.",[75,324,326],{"className":77,"code":325,"language":79,"meta":80,"style":80},"awk '{if (length($0) > 0) {sub(/foo/, \"bar\"); print}}}' input.txt > output.txt\n",[50,327,328],{"__ignoreMap":80},[84,329,330,332,335,338,340],{"class":86,"line":87},[84,331,52],{"class":97},[84,333,334],{"class":101}," '{if (length($0) > 0) {sub(/foo/, \"bar\"); print}}}'",[84,336,337],{"class":101}," input.txt",[84,339,306],{"class":305},[84,341,342],{"class":101}," output.txt\n",[20,344,345,346,349,350,353],{},"Команда проверяет длину строки, выполняет замену ",[50,347,348],{},"foo"," на ",[50,351,352],{},"bar"," и выводит непустые строки.",[144,355,357],{"id":356},"шаг-6-сохранение-результата-и-проверка","Шаг 6: Сохранение результата и проверка",[20,359,360],{},"Убедитесь, что результат соответствует ожиданиям:",[75,362,364],{"className":77,"code":363,"language":79,"meta":80,"style":80},"# Первые 10 строк результата\ncat output.txt | head -n 10\n\n# Количество строк в файле\nwc -l output.txt\n",[50,365,366,371,391,395,400],{"__ignoreMap":80},[84,367,368],{"class":86,"line":87},[84,369,370],{"class":90},"# Первые 10 строк результата\n",[84,372,373,376,379,382,385,388],{"class":86,"line":94},[84,374,375],{"class":97},"cat",[84,377,378],{"class":101}," output.txt",[84,380,381],{"class":305}," |",[84,383,384],{"class":97}," head",[84,386,387],{"class":162}," -n",[84,389,390],{"class":162}," 10\n",[84,392,393],{"class":86,"line":114},[84,394,118],{"emptyLinePlaceholder":117},[84,396,397],{"class":86,"line":121},[84,398,399],{"class":90},"# Количество строк в файле\n",[84,401,402,405,408],{"class":86,"line":127},[84,403,404],{"class":97},"wc",[84,406,407],{"class":162}," -l",[84,409,342],{"class":101},[221,411,412],{},[20,413,414,417,418,421,422,424],{},[24,415,416],{},"⚠️ Важно:"," Если файл ",[50,419,420],{},"output.txt"," уже существовал, команда ",[50,423,52],{}," перезапишет его. Используйте резервные копии, если нужно сохранить исходные данные.",[15,426,428],{"id":427},"проверка-результата","Проверка результата",[20,430,431],{},"После выполнения всех шагов проверьте, что операции выполнены корректно:",[37,433,434,443,453,459],{},[40,435,436,437,439,440,70],{},"В ",[50,438,62],{}," должны появиться заменённые значения ",[50,441,442],{},"ok",[40,444,445,446,449,450,70],{},"Вывод ",[50,447,448],{},"awk '/warning/ …'"," должен содержать только строки со словом ",[50,451,452],{},"warning",[40,454,455,458],{},[50,456,457],{},"cleaned.txt"," не должен содержать пустых строк.",[40,460,461,463,464,466,467,70],{},[50,462,420],{}," должен содержать строки без ",[50,465,348],{}," и с заменёнными ",[50,468,352],{},[15,470,472],{"id":471},"возможные-проблемы","Возможные проблемы",[474,475,476,492],"table",{},[477,478,479],"thead",{},[480,481,482,486,489],"tr",{},[483,484,485],"th",{},"Симптом",[483,487,488],{},"Причина",[483,490,491],{},"Решение",[493,494,495,520,539,554,569,589,606],"tbody",{},[480,496,497,503,506],{},[498,499,500],"td",{},[50,501,502],{},"sed: command not found",[498,504,505],{},"Утилита SED отсутствует",[498,507,508,509,511,512,515,516,519],{},"Установите пакет ",[50,510,55],{}," (",[50,513,514],{},"apt-get install sed"," или ",[50,517,518],{},"yum install sed",")",[480,521,522,527,530],{},[498,523,524],{},[50,525,526],{},"awk: command not found",[498,528,529],{},"AWK отсутствует",[498,531,532,533,511,536,519],{},"Установите ",[50,534,535],{},"gawk",[50,537,538],{},"apt-get install gawk",[480,540,541,544,547],{},[498,542,543],{},"Замена не применяется",[498,545,546],{},"Ошибка в регулярном выражении",[498,548,549,550,553],{},"Проверьте шаблон: ",[50,551,552],{},"s/old/new/"," ; используйте кавычки правильно",[480,555,556,559,562],{},[498,557,558],{},"Пустые строки не удаляются",[498,560,561],{},"Неверный шаблон",[498,563,564,565,568],{},"Используйте ",[50,566,567],{},"sed '/^$/d'"," (точка в начале и конце)",[480,570,571,576,579],{},[498,572,573],{},[50,574,575],{},"awk: cmd. number out of range",[498,577,578],{},"Превышение диапазона полей",[498,580,564,581,584,585,588],{},[50,582,583],{},"$0"," для всей строки или увеличьте ",[50,586,587],{},"FS"," если нужно больше полей",[480,590,591,594,597],{},[498,592,593],{},"Нет доступа к файлу",[498,595,596],{},"Недостаточно прав",[498,598,599,600,602,603,519],{},"Запустите команду с ",[50,601,98],{}," или измените права (",[50,604,605],{},"chmod",[480,607,608,614,617],{},[498,609,610,613],{},[50,611,612],{},"sed -i"," не работает на macOS",[498,615,616],{},"Другой синтаксис",[498,618,564,619],{},[50,620,621],{},"sed -i '' 's/old/new/g'",[20,623,624],{},"Теперь у вас есть полный набор команд для повседневной обработки текста в Linux. Экспериментируйте, комбинируйте и создавайте собственные скрипты для автоматизации рутинных задач.",[626,627,628],"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 .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 .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":80,"searchDepth":94,"depth":94,"links":630},[631,632,633,641,642],{"id":17,"depth":94,"text":18},{"id":34,"depth":94,"text":35},{"id":141,"depth":94,"text":142,"children":634},[635,636,637,638,639,640],{"id":146,"depth":114,"text":147},{"id":175,"depth":114,"text":176},{"id":239,"depth":114,"text":240},{"id":283,"depth":114,"text":284},{"id":318,"depth":114,"text":319},{"id":356,"depth":114,"text":357},{"id":427,"depth":94,"text":428},{"id":471,"depth":94,"text":472},null,"2026-07-10 09:18:54","Быстро научитесь обрабатывать текстовые файлы в Linux с помощью AWK и SED. Пошаговое руководство за 10 минут поможет автоматизировать массовое редактирование.","easy",false,"10-15 мин","md",[651,654,657],{"question":652,"answer":653},"В чем основное различие между AWK и SED?","SED работает с потоком текста и редактирует его построчно, в то время как AWK обрабатывает строки, разделяя каждую из них на поля и позволяя выполнять вычисления и условный отбор.",{"question":655,"answer":656},"Как выполнить глобальную замену текста в файле с помощью sed?","Используйте команду `sed -i 's/old/new/g' filename`. Флаг `-i` редактирует файл напрямую, а шаблон `s/old/new/g` заменяет все вхождения.",{"question":658,"answer":659},"Когда лучше использовать AWK вместо SED?","Используйте AWK, когда вам нужно анализировать поля, выполнять арифметические операции или обрабатывать данные в табличном формате. SED идеально подходит для простых вставок, удалений или замен без необходимости работы с полями.",[661,664,667,670,673,676],{"name":662,"text":663},"Установите необходимые инструменты","В большинстве дистрибутивов Linux утилиты `awk` и `sed` уже установлены. Проверьте версию: `awk --version` и `sed --version`. Если они отсутствуют, установите их пакетами `gawk` или `sed`.",{"name":665,"text":666},"Замена текста с помощью sed","Замените все вхождения слова `error` на `ok` в файле `log.txt`:\n\n```bash\n# Редактирует файл напрямую\nsed -i 's/error/ok/g' log.txt\n# Показать результат без изменения исходного файла\nsed 's/error/ok/g' log.txt\n```",{"name":668,"text":669},"Фильтрация строк с помощью awk","Выведите только строки, содержащие слово `warning`:\n\n```bash\nawk '/warning/ {print}' log.txt\n```\n\nДля вывода всей строки вместе с номером строки добавьте `\nawk '/warning/ {print NR \": \" $0}' log.txt`\n",{"name":671,"text":672},"Удаление пустых строк с помощью sed","Удалите все пустые строки из `data.txt` и сохраните результат:\n\n```bash\nsed '/^$/d' data.txt > cleaned.txt\n```",{"name":674,"text":675},"Комбинированный пример: фильтрация и замена","Прочитайте `input.txt`, замените `foo` на `bar` и выведите только непустые строки:\n\n```bash\nawk '{if (length($0) > 0) {sub(/foo/, \"bar\"); print}}}' input.txt > output.txt\n```\n\nКоманда выполняет замену (`sub`) и печатает только непустые строки.",{"name":677,"text":678},"Сохранение результата и проверка","После выполнения команд убедитесь, что `output.txt` содержит ожидаемый контент:\n\n```bash\ncat output.txt | head -n 10\n```\n\nТакже проверьте размер файла: `wc -l output.txt`.","PT15M",[681,682,683,684,685,686,687,688],"awk sed обработка текста linux","команды awk sed примеры","awk sed замена текста","awk sed редактирование файлов","awk sed массовое редактирование","awk sed фильтрация строк","awk sed удаление строк","awk sed объединение файлов","ru_RU",{},"/guides/linux/linux-text-processing-awk-sed","linux",[694,695,696],"/guides/linux/linux-text-processing-awk","/guides/linux/linux-text-processing-sed","/guides/linux/linux-shell-scripting-basics","Гайды Linux",{"title":5,"description":645},"guides/linux/linux-text-processing-awk-sed","В этом гайде вы узнаете, как использовать AWK и SED для массового редактирования, фильтрации и преобразования текста в Linux. После выполнения инструкции вы сможете выполнять обычные текстовые операции с помощью простых команд.",[26,30,702,703,704,705,706],"Linux","обработка текста","командная строка","массовое редактирование","скрипты","guide","qT3YcUAhverm198nXZMikvqhsA4P5ZKw3b93v-173Y8",{"data":710,"body":711},{},{"type":712,"children":713},"root",[714],{"type":715,"tag":20,"props":716,"children":717},"element",{},[718],{"type":719,"value":653},"text",{"data":721,"body":722},{},{"type":712,"children":723},[724],{"type":715,"tag":20,"props":725,"children":726},{},[727,729,735,737,742,744,750],{"type":719,"value":728},"Используйте команду ",{"type":715,"tag":50,"props":730,"children":732},{"className":731},[],[733],{"type":719,"value":734},"sed -i 's/old/new/g' filename",{"type":719,"value":736},". Флаг ",{"type":715,"tag":50,"props":738,"children":740},{"className":739},[],[741],{"type":719,"value":231},{"type":719,"value":743}," редактирует файл напрямую, а шаблон ",{"type":715,"tag":50,"props":745,"children":747},{"className":746},[],[748],{"type":719,"value":749},"s/old/new/g",{"type":719,"value":751}," заменяет все вхождения.",{"data":753,"body":754},{},{"type":712,"children":755},[756],{"type":715,"tag":20,"props":757,"children":758},{},[759],{"type":719,"value":659},{"data":761,"body":762},{},{"type":712,"children":763},[764],{"type":715,"tag":20,"props":765,"children":766},{},[767,769,774,775,780,782,788,789,795,797,802,803,808],{"type":719,"value":768},"В большинстве дистрибутивов Linux утилиты ",{"type":715,"tag":50,"props":770,"children":772},{"className":771},[],[773],{"type":719,"value":52},{"type":719,"value":27},{"type":715,"tag":50,"props":776,"children":778},{"className":777},[],[779],{"type":719,"value":55},{"type":719,"value":781}," уже установлены. Проверьте версию: ",{"type":715,"tag":50,"props":783,"children":785},{"className":784},[],[786],{"type":719,"value":787},"awk --version",{"type":719,"value":27},{"type":715,"tag":50,"props":790,"children":792},{"className":791},[],[793],{"type":719,"value":794},"sed --version",{"type":719,"value":796},". Если они отсутствуют, установите их пакетами ",{"type":715,"tag":50,"props":798,"children":800},{"className":799},[],[801],{"type":719,"value":535},{"type":719,"value":515},{"type":715,"tag":50,"props":804,"children":806},{"className":805},[],[807],{"type":719,"value":55},{"type":719,"value":70},[810],{"id":811,"title":812,"appliesTo":813,"author":10,"body":818,"canonical":643,"code":643,"createdAt":1518,"description":1519,"difficulty":646,"draft":647,"estimatedTime":648,"extension":649,"faq":1520,"howToSteps":1533,"howToTotalTime":679,"image":643,"keywords":1549,"locale":689,"meta":1559,"navigation":117,"path":696,"platform":692,"related":1560,"section":697,"seo":1563,"severity":643,"stem":1564,"summary":1565,"tags":1566,"twitterCreator":643,"twitterSite":643,"type":707,"updatedAt":1518,"__hash__":1573},"content_ru/guides/linux/linux-shell-scripting-basics.md","Освойте основы написания скриптов в Linux Shell: от первых команд до запуска",[814,815,816,817],"Bash 4.4+","Ubuntu 22.04 LTS и выше","Debian 11+","CentOS 8+/Rocky Linux 8+",{"type":12,"value":819,"toc":1507},[820,822,825,828,830,852,856,863,872,875,890,902,906,909,983,989,991,995,1002,1091,1098,1145,1152,1205,1209,1216,1303,1310,1364,1368,1371,1385,1388,1417,1420,1431,1433,1436,1445,1452,1454,1504],[15,821,18],{"id":17},[20,823,824],{},"Shell-скрипты позволяют автоматизировать рутину в Linux: резервное копирование, обслуживание логов, развёртывание и проверку систем. Вместо того чтобы вводить одни и те же команды каждый день, вы создаёте скрипт один раз и запускаете его за секунды. Это экономит время и снижает риск ошибок от опечаток.",[20,826,827],{},"После прочтения вы сможете создавать и запускать базовые скрипты, использовать переменные, условия и циклы, а также проверять результат и исправлять типовые ошибки.",[15,829,35],{"id":34},[37,831,832,835,838,841],{},[40,833,834],{},"Bash 4.4+ (входит в большинство современных дистрибутивов).",[40,836,837],{},"Любой текстовый редактор: nano, vim или VS Code.",[40,839,840],{},"Права на запись в рабочий каталог и выполнение файлов.",[40,842,843,844,63,847,63,850,70],{},"Базовое понимание командной строки: ",[50,845,846],{},"cd",[50,848,849],{},"ls",[50,851,605],{},[15,853,855],{"id":854},"шаг-1-создать-файл-скрипта-и-добавить-shebang","Шаг 1: Создать файл скрипта и добавить shebang",[20,857,858,859,862],{},"Создайте файл с понятным именем, например ",[50,860,861],{},"hello.sh",", и добавьте первой строкой shebang — это указывает, в каком shell выполнять скрипт:",[75,864,866],{"className":77,"code":865,"language":79,"meta":80,"style":80},"#!/bin/bash\n",[50,867,868],{"__ignoreMap":80},[84,869,870],{"class":86,"line":87},[84,871,865],{"class":90},[20,873,874],{},"Сделайте файл исполняемым:",[75,876,878],{"className":77,"code":877,"language":79,"meta":80,"style":80},"chmod +x hello.sh\n",[50,879,880],{"__ignoreMap":80},[84,881,882,884,887],{"class":86,"line":87},[84,883,605],{"class":97},[84,885,886],{"class":101}," +x",[84,888,889],{"class":101}," hello.sh\n",[221,891,892],{},[20,893,894,895,898,899,70],{},"💡 Совет: Если скрипт должен работать на разных системах, проверьте путь к bash через ",[50,896,897],{},"which bash",". Для максимальной переносимости можно использовать ",[50,900,901],{},"#!/usr/bin/env bash",[15,903,905],{"id":904},"шаг-2-добавить-комментарии-и-переменные","Шаг 2: Добавить комментарии и переменные",[20,907,908],{},"Опишите цель скрипта и задайте переменные. Всегда заключайте строки с пробелами в двойные кавычки:",[75,910,912],{"className":77,"code":911,"language":79,"meta":80,"style":80},"#!/bin/bash\n# hello.sh — приветствие и информация о системе\n\nuser=\"Иван\"\ngreeting=\"Добро пожаловать, $user\"\necho \"$greeting\"\necho \"Сегодня: $(date)\"\n",[50,913,914,918,923,927,939,955,969],{"__ignoreMap":80},[84,915,916],{"class":86,"line":87},[84,917,865],{"class":90},[84,919,920],{"class":86,"line":94},[84,921,922],{"class":90},"# hello.sh — приветствие и информация о системе\n",[84,924,925],{"class":86,"line":114},[84,926,118],{"emptyLinePlaceholder":117},[84,928,929,933,936],{"class":86,"line":121},[84,930,932],{"class":931},"sVt8B","user",[84,934,935],{"class":305},"=",[84,937,938],{"class":101},"\"Иван\"\n",[84,940,941,944,946,949,952],{"class":86,"line":127},[84,942,943],{"class":931},"greeting",[84,945,935],{"class":305},[84,947,948],{"class":101},"\"Добро пожаловать, ",[84,950,951],{"class":931},"$user",[84,953,954],{"class":101},"\"\n",[84,956,958,961,964,967],{"class":86,"line":957},6,[84,959,960],{"class":162},"echo",[84,962,963],{"class":101}," \"",[84,965,966],{"class":931},"$greeting",[84,968,954],{"class":101},[84,970,972,974,977,980],{"class":86,"line":971},7,[84,973,960],{"class":162},[84,975,976],{"class":101}," \"Сегодня: $(",[84,978,979],{"class":97},"date",[84,981,982],{"class":101},")\"\n",[20,984,564,985,988],{},[50,986,987],{},"$(command)"," для подстановки вывода команды в переменную или строку.",[311,990],{},[15,992,994],{"id":993},"шаг-3-реализовать-условия-и-циклы","Шаг 3: Реализовать условия и циклы",[20,996,997,998,1001],{},"Добавьте логику с помощью ",[50,999,1000],{},"if"," и циклы для повторяющихся задач. Пример проверки существования файла:",[75,1003,1005],{"className":77,"code":1004,"language":79,"meta":80,"style":80},"file=\"/tmp/test.log\"\n\nif [[ -f \"$file\" ]]; then\n  echo \"Файл $file существует.\"\nelse\n  echo \"Файл $file не найден — создаю.\"\n  touch \"$file\"\nfi\n",[50,1006,1007,1017,1021,1045,1058,1063,1074,1085],{"__ignoreMap":80},[84,1008,1009,1012,1014],{"class":86,"line":87},[84,1010,1011],{"class":931},"file",[84,1013,935],{"class":305},[84,1015,1016],{"class":101},"\"/tmp/test.log\"\n",[84,1018,1019],{"class":86,"line":94},[84,1020,118],{"emptyLinePlaceholder":117},[84,1022,1023,1025,1028,1031,1033,1036,1039,1042],{"class":86,"line":114},[84,1024,1000],{"class":305},[84,1026,1027],{"class":931}," [[ ",[84,1029,1030],{"class":305},"-f",[84,1032,963],{"class":101},[84,1034,1035],{"class":931},"$file",[84,1037,1038],{"class":101},"\"",[84,1040,1041],{"class":931}," ]]; ",[84,1043,1044],{"class":305},"then\n",[84,1046,1047,1050,1053,1055],{"class":86,"line":121},[84,1048,1049],{"class":162},"  echo",[84,1051,1052],{"class":101}," \"Файл ",[84,1054,1035],{"class":931},[84,1056,1057],{"class":101}," существует.\"\n",[84,1059,1060],{"class":86,"line":127},[84,1061,1062],{"class":305},"else\n",[84,1064,1065,1067,1069,1071],{"class":86,"line":957},[84,1066,1049],{"class":162},[84,1068,1052],{"class":101},[84,1070,1035],{"class":931},[84,1072,1073],{"class":101}," не найден — создаю.\"\n",[84,1075,1076,1079,1081,1083],{"class":86,"line":971},[84,1077,1078],{"class":97},"  touch",[84,1080,963],{"class":101},[84,1082,1035],{"class":931},[84,1084,954],{"class":101},[84,1086,1088],{"class":86,"line":1087},8,[84,1089,1090],{"class":305},"fi\n",[20,1092,1093,1094,1097],{},"Пример цикла ",[50,1095,1096],{},"for"," для обработки списка:",[75,1099,1101],{"className":77,"code":1100,"language":79,"meta":80,"style":80},"for name in Алиса Борис Виктор; do\n  echo \"Привет, $name\"\ndone\n",[50,1102,1103,1128,1140],{"__ignoreMap":80},[84,1104,1105,1107,1110,1113,1116,1119,1122,1125],{"class":86,"line":87},[84,1106,1096],{"class":305},[84,1108,1109],{"class":931}," name ",[84,1111,1112],{"class":305},"in",[84,1114,1115],{"class":101}," Алиса",[84,1117,1118],{"class":101}," Борис",[84,1120,1121],{"class":101}," Виктор",[84,1123,1124],{"class":931},"; ",[84,1126,1127],{"class":305},"do\n",[84,1129,1130,1132,1135,1138],{"class":86,"line":94},[84,1131,1049],{"class":162},[84,1133,1134],{"class":101}," \"Привет, ",[84,1136,1137],{"class":931},"$name",[84,1139,954],{"class":101},[84,1141,1142],{"class":86,"line":114},[84,1143,1144],{"class":305},"done\n",[20,1146,1147,1148,1151],{},"И цикл ",[50,1149,1150],{},"while"," для чтения файла построчно:",[75,1153,1155],{"className":77,"code":1154,"language":79,"meta":80,"style":80},"while IFS= read -r line; do\n  echo \"Строка: $line\"\ndone \u003C \"$file\"\n",[50,1156,1157,1179,1191],{"__ignoreMap":80},[84,1158,1159,1161,1164,1166,1169,1172,1175,1177],{"class":86,"line":87},[84,1160,1150],{"class":305},[84,1162,1163],{"class":931}," IFS",[84,1165,935],{"class":305},[84,1167,1168],{"class":162}," read",[84,1170,1171],{"class":162}," -r",[84,1173,1174],{"class":101}," line",[84,1176,1124],{"class":931},[84,1178,1127],{"class":305},[84,1180,1181,1183,1186,1189],{"class":86,"line":94},[84,1182,1049],{"class":162},[84,1184,1185],{"class":101}," \"Строка: ",[84,1187,1188],{"class":931},"$line",[84,1190,954],{"class":101},[84,1192,1193,1196,1199,1201,1203],{"class":86,"line":114},[84,1194,1195],{"class":305},"done",[84,1197,1198],{"class":305}," \u003C",[84,1200,963],{"class":101},[84,1202,1035],{"class":931},[84,1204,954],{"class":101},[15,1206,1208],{"id":1207},"шаг-4-принимать-аргументы-и-проверять-коды-возврата","Шаг 4: Принимать аргументы и проверять коды возврата",[20,1210,1211,1212,1215],{},"Скрипт может получать параметры при запуске. Проверяйте их количество и используйте ",[50,1213,1214],{},"exit"," для завершения с кодом:",[75,1217,1219],{"className":77,"code":1218,"language":79,"meta":80,"style":80},"#!/bin/bash\n# usage: ./greet.sh \u003Cимя>\n\nif [[ $# -lt 1 ]]; then\n  echo \"Ошибка: укажите имя.\"\n  exit 1\nfi\n\nname=\"$1\"\necho \"Здравствуйте, $name\"\n",[50,1220,1221,1225,1230,1234,1253,1260,1268,1272,1276,1291],{"__ignoreMap":80},[84,1222,1223],{"class":86,"line":87},[84,1224,865],{"class":90},[84,1226,1227],{"class":86,"line":94},[84,1228,1229],{"class":90},"# usage: ./greet.sh \u003Cимя>\n",[84,1231,1232],{"class":86,"line":114},[84,1233,118],{"emptyLinePlaceholder":117},[84,1235,1236,1238,1240,1243,1246,1249,1251],{"class":86,"line":121},[84,1237,1000],{"class":305},[84,1239,1027],{"class":931},[84,1241,1242],{"class":162},"$#",[84,1244,1245],{"class":305}," -lt",[84,1247,1248],{"class":162}," 1",[84,1250,1041],{"class":931},[84,1252,1044],{"class":305},[84,1254,1255,1257],{"class":86,"line":127},[84,1256,1049],{"class":162},[84,1258,1259],{"class":101}," \"Ошибка: укажите имя.\"\n",[84,1261,1262,1265],{"class":86,"line":957},[84,1263,1264],{"class":162},"  exit",[84,1266,1267],{"class":162}," 1\n",[84,1269,1270],{"class":86,"line":971},[84,1271,1090],{"class":305},[84,1273,1274],{"class":86,"line":1087},[84,1275,118],{"emptyLinePlaceholder":117},[84,1277,1279,1282,1284,1286,1289],{"class":86,"line":1278},9,[84,1280,1281],{"class":931},"name",[84,1283,935],{"class":305},[84,1285,1038],{"class":101},[84,1287,1288],{"class":162},"$1",[84,1290,954],{"class":101},[84,1292,1294,1296,1299,1301],{"class":86,"line":1293},10,[84,1295,960],{"class":162},[84,1297,1298],{"class":101}," \"Здравствуйте, ",[84,1300,1137],{"class":931},[84,1302,954],{"class":101},[20,1304,1305,1306,1309],{},"Проверяйте успешность команд через ",[50,1307,1308],{},"$?"," или прямо в условии:",[75,1311,1313],{"className":77,"code":1312,"language":79,"meta":80,"style":80},"if cp source.txt backup.txt; then\n  echo \"Копирование успешно.\"\nelse\n  echo \"Копирование не удалось.\" >&2\n  exit 2\nfi\n",[50,1314,1315,1332,1339,1343,1353,1360],{"__ignoreMap":80},[84,1316,1317,1319,1322,1325,1328,1330],{"class":86,"line":87},[84,1318,1000],{"class":305},[84,1320,1321],{"class":97}," cp",[84,1323,1324],{"class":101}," source.txt",[84,1326,1327],{"class":101}," backup.txt",[84,1329,1124],{"class":931},[84,1331,1044],{"class":305},[84,1333,1334,1336],{"class":86,"line":94},[84,1335,1049],{"class":162},[84,1337,1338],{"class":101}," \"Копирование успешно.\"\n",[84,1340,1341],{"class":86,"line":114},[84,1342,1062],{"class":305},[84,1344,1345,1347,1350],{"class":86,"line":121},[84,1346,1049],{"class":162},[84,1348,1349],{"class":101}," \"Копирование не удалось.\"",[84,1351,1352],{"class":305}," >&2\n",[84,1354,1355,1357],{"class":86,"line":127},[84,1356,1264],{"class":162},[84,1358,1359],{"class":162}," 2\n",[84,1361,1362],{"class":86,"line":957},[84,1363,1090],{"class":305},[15,1365,1367],{"id":1366},"шаг-5-протестировать-и-отладить","Шаг 5: Протестировать и отладить",[20,1369,1370],{},"Запустите скрипт в режиме отладки, чтобы видеть каждую выполненную команду:",[75,1372,1374],{"className":77,"code":1373,"language":79,"meta":80,"style":80},"bash -x hello.sh\n",[50,1375,1376],{"__ignoreMap":80},[84,1377,1378,1380,1383],{"class":86,"line":87},[84,1379,79],{"class":97},[84,1381,1382],{"class":162}," -x",[84,1384,889],{"class":101},[20,1386,1387],{},"Или добавьте временно в скрипт:",[75,1389,1391],{"className":77,"code":1390,"language":79,"meta":80,"style":80},"set -x   # включить отладку\n# ваши команды\nset +x   # отключить отладку\n",[50,1392,1393,1403,1408],{"__ignoreMap":80},[84,1394,1395,1398,1400],{"class":86,"line":87},[84,1396,1397],{"class":162},"set",[84,1399,1382],{"class":162},[84,1401,1402],{"class":90},"   # включить отладку\n",[84,1404,1405],{"class":86,"line":94},[84,1406,1407],{"class":90},"# ваши команды\n",[84,1409,1410,1412,1414],{"class":86,"line":114},[84,1411,1397],{"class":162},[84,1413,886],{"class":101},[84,1415,1416],{"class":90},"   # отключить отладку\n",[20,1418,1419],{},"Проверьте:",[37,1421,1422,1425,1428],{},[40,1423,1424],{},"Правильность путей и прав на файлы.",[40,1426,1427],{},"Корректность shebang.",[40,1429,1430],{},"Отсутствие скрытых символов (особенно при переносе из Windows).",[15,1432,428],{"id":427},[20,1434,1435],{},"После правок запустите скрипт:",[75,1437,1439],{"className":77,"code":1438,"language":79,"meta":80,"style":80},"./hello.sh\n",[50,1440,1441],{"__ignoreMap":80},[84,1442,1443],{"class":86,"line":87},[84,1444,1438],{"class":97},[20,1446,1447,1448,1451],{},"Ожидаемый вывод должен содержать приветствие, текущую дату и результаты действий, прописанных в логике. Если поведение отличается, используйте ",[50,1449,1450],{},"bash -x"," и проверьте коды возврата команд.",[15,1453,472],{"id":471},[37,1455,1456,1465,1474,1485,1494],{},[40,1457,1458,1461,1462,70],{},[24,1459,1460],{},"Permission denied"," — у файла нет прав на выполнение. Выполните ",[50,1463,1464],{},"chmod +x script.sh",[40,1466,1467,1470,1471,70],{},[24,1468,1469],{},"No such file or directory"," при запуске — проверьте shebang и наличие переносов строк (CRLF). Исправьте через ",[50,1472,1473],{},"dos2unix script.sh",[40,1475,1476,1479,1480,515,1483,70],{},[24,1477,1478],{},"Скрипт выполняется в другом shell"," — без shebang запуск может пойти через текущий shell, что приведёт к ошибкам синтаксиса. Всегда указывайте ",[50,1481,1482],{},"#!/bin/bash",[50,1484,901],{},[40,1486,1487,1490,1491,70],{},[24,1488,1489],{},"Переменные пустые или с пробелами"," — заключайте их в двойные кавычки внутри условий и команд: ",[50,1492,1493],{},"\"$var\"",[40,1495,1496,1499,1500,1503],{},[24,1497,1498],{},"Неожиданное завершение на ошибке"," — добавьте ",[50,1501,1502],{},"set -e"," в начало, чтобы скрипт прерывался при первой неудачной команде, или обрабатывайте коды возврата явно.",[626,1505,1506],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}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 .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 .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":80,"searchDepth":94,"depth":94,"links":1508},[1509,1510,1511,1512,1513,1514,1515,1516,1517],{"id":17,"depth":94,"text":18},{"id":34,"depth":94,"text":35},{"id":854,"depth":94,"text":855},{"id":904,"depth":94,"text":905},{"id":993,"depth":94,"text":994},{"id":1207,"depth":94,"text":1208},{"id":1366,"depth":94,"text":1367},{"id":427,"depth":94,"text":428},{"id":471,"depth":94,"text":472},"2026-04-27 11:19:15","Пошаговое руководство по созданию и запуску shell-скриптов в Linux. За 10–15 минут вы освоите переменные, условия, циклы и отладку. Начните автоматизировать рутину уже сегодня.",[1521,1524,1527,1530],{"question":1522,"answer":1523},"В чём разница между sh и bash при написании скриптов?","Bash расширяет возможности sh: добавляет массивы, расширенные шаблоны и удобный синтаксис. Для переносимости в старых системах используют sh, для новых — bash.",{"question":1525,"answer":1526},"Почему скрипт не запускается по двойному клику или выдаёт «Permission denied»?","У файла нет прав на выполнение. Выполните chmod +x script.sh. Также проверьте shebang в первой строке и запускайте через ./script.sh из каталога с файлом.",{"question":1528,"answer":1529},"Как отлаживать скрипт, если он работает не так, как ожидалось?","Запускайте с bash -x script.sh или добавьте set -x в скрипт. Используйте echo для промежуточных значений и проверяйте коды возврата через $?.",{"question":1531,"answer":1532},"Нужно ли всегда писать #!/bin/bash или можно обойтись без него?","Shebang обязателен для прямого запуска ./script.sh. Без него скрипт выполнится в текущем shell, что может привести к несовместимости синтаксиса и переменных.",[1534,1537,1540,1543,1546],{"name":1535,"text":1536},"Создать файл скрипта и добавить shebang","Создайте файл с расширением .sh, добавьте первой строкой #!/bin/bash и сделайте файл исполняемым через chmod +x.",{"name":1538,"text":1539},"Добавить комментарии и переменные","Опишите цель скрипта комментариями, задайте переменные и используйте кавычки для строк с пробелами.",{"name":1541,"text":1542},"Реализовать условия и циклы","Используйте if/elif/else для ветвлений и for/while для циклов. Заключайте переменные в двойные кавычки внутри условий.",{"name":1544,"text":1545},"Принимать аргументы и проверять коды возврата","Через $1, $2 читайте параметры, а через $? проверяйте успешность команд. Завершайте скрипт с разными exit при ошибках.",{"name":1547,"text":1548},"Протестировать и отладить","Запустите скрипт с bash -x, проверьте пути и права, убедитесь, что он работает в пустом каталоге и с разными входными данными.",[1550,1551,1552,1553,1554,1555,1556,1557,1558],"linux shell scripting basics","как написать скрипт в linux","bash скрипт для начинающих","запуск shell скрипта linux","bash переменные и условия","shell скрипт автоматизация задач","bash отладка скрипта","shebang linux что это","bash цикл for while",{},[1561,1562,691],"/guides/linux/linux-cron-jobs-guide","/guides/linux/linux-file-permissions-guide",{"title":812,"description":1519},"guides/linux/linux-shell-scripting-basics","Краткое введение в написание shell-скриптов для Linux: вы научитесь создавать, запускать и отлаживать скрипты, используя переменные, условия и циклы для автоматизации типовых задач.",[692,79,1567,1568,1569,1570,1571,1572],"shell","scripting","automation","bash-скрипты","shell-скрипты","bash-циклы","NPJ2XuIgHBGKFnuyynrWEylDyAue4_5nPM1FI9f6pCU",{"data":1575,"body":1576},{},{"type":712,"children":1577},[1578,1603,1613],{"type":715,"tag":20,"props":1579,"children":1580},{},[1581,1583,1589,1590,1595,1597,1602],{"type":719,"value":1582},"Замените все вхождения слова ",{"type":715,"tag":50,"props":1584,"children":1586},{"className":1585},[],[1587],{"type":719,"value":1588},"error",{"type":719,"value":349},{"type":715,"tag":50,"props":1591,"children":1593},{"className":1592},[],[1594],{"type":719,"value":442},{"type":719,"value":1596}," в файле ",{"type":715,"tag":50,"props":1598,"children":1600},{"className":1599},[],[1601],{"type":719,"value":62},{"type":719,"value":315},{"type":715,"tag":75,"props":1604,"children":1608},{"className":1605,"code":1606,"language":79,"meta":80,"style":1607},"language-bash","# Редактирует файл напрямую\nsed -i 's/error/ok/g' log.txt\n# Показать результат без изменения исходного файла\nsed 's/error/ok/g' log.txt\n","undefined",[1609],{"type":715,"tag":50,"props":1610,"children":1611},{"__ignoreMap":80},[1612],{"type":719,"value":1606},{"type":715,"tag":626,"props":1614,"children":1615},{},[1616],{"type":719,"value":80},{"data":1618,"body":1619},{},{"type":712,"children":1620},[1621,1632,1640,1651],{"type":715,"tag":20,"props":1622,"children":1623},{},[1624,1626,1631],{"type":719,"value":1625},"Выведите только строки, содержащие слово ",{"type":715,"tag":50,"props":1627,"children":1629},{"className":1628},[],[1630],{"type":719,"value":452},{"type":719,"value":315},{"type":715,"tag":75,"props":1633,"children":1635},{"className":1605,"code":1634,"language":79,"meta":80,"style":1607},"awk '/warning/ {print}' log.txt\n",[1636],{"type":715,"tag":50,"props":1637,"children":1638},{"__ignoreMap":80},[1639],{"type":719,"value":1634},{"type":715,"tag":20,"props":1641,"children":1642},{},[1643,1645],{"type":719,"value":1644},"Для вывода всей строки вместе с номером строки добавьте ",{"type":715,"tag":50,"props":1646,"children":1648},{"className":1647},[],[1649],{"type":719,"value":1650}," awk '/warning/ {print NR \": \" $0}' log.txt",{"type":715,"tag":626,"props":1652,"children":1653},{},[1654],{"type":719,"value":80},{"data":1656,"body":1657},{},{"type":712,"children":1658},[1659,1671,1678],{"type":715,"tag":20,"props":1660,"children":1661},{},[1662,1664,1669],{"type":719,"value":1663},"Удалите все пустые строки из ",{"type":715,"tag":50,"props":1665,"children":1667},{"className":1666},[],[1668],{"type":719,"value":66},{"type":719,"value":1670}," и сохраните результат:",{"type":715,"tag":75,"props":1672,"children":1673},{"className":1605,"code":290,"language":79,"meta":80,"style":1607},[1674],{"type":715,"tag":50,"props":1675,"children":1676},{"__ignoreMap":80},[1677],{"type":719,"value":290},{"type":715,"tag":626,"props":1679,"children":1680},{},[1681],{"type":719,"value":80},{"data":1683,"body":1684},{},{"type":712,"children":1685},[1686,1711,1718,1731],{"type":715,"tag":20,"props":1687,"children":1688},{},[1689,1691,1696,1698,1703,1704,1709],{"type":719,"value":1690},"Прочитайте ",{"type":715,"tag":50,"props":1692,"children":1694},{"className":1693},[],[1695],{"type":719,"value":69},{"type":719,"value":1697},", замените ",{"type":715,"tag":50,"props":1699,"children":1701},{"className":1700},[],[1702],{"type":719,"value":348},{"type":719,"value":349},{"type":715,"tag":50,"props":1705,"children":1707},{"className":1706},[],[1708],{"type":719,"value":352},{"type":719,"value":1710}," и выведите только непустые строки:",{"type":715,"tag":75,"props":1712,"children":1713},{"className":1605,"code":325,"language":79,"meta":80,"style":1607},[1714],{"type":715,"tag":50,"props":1715,"children":1716},{"__ignoreMap":80},[1717],{"type":719,"value":325},{"type":715,"tag":20,"props":1719,"children":1720},{},[1721,1723,1729],{"type":719,"value":1722},"Команда выполняет замену (",{"type":715,"tag":50,"props":1724,"children":1726},{"className":1725},[],[1727],{"type":719,"value":1728},"sub",{"type":719,"value":1730},") и печатает только непустые строки.",{"type":715,"tag":626,"props":1732,"children":1733},{},[1734],{"type":719,"value":80},{"data":1736,"body":1737},{},{"type":712,"children":1738},[1739,1751,1759,1771],{"type":715,"tag":20,"props":1740,"children":1741},{},[1742,1744,1749],{"type":719,"value":1743},"После выполнения команд убедитесь, что ",{"type":715,"tag":50,"props":1745,"children":1747},{"className":1746},[],[1748],{"type":719,"value":420},{"type":719,"value":1750}," содержит ожидаемый контент:",{"type":715,"tag":75,"props":1752,"children":1754},{"className":1605,"code":1753,"language":79,"meta":80,"style":1607},"cat output.txt | head -n 10\n",[1755],{"type":715,"tag":50,"props":1756,"children":1757},{"__ignoreMap":80},[1758],{"type":719,"value":1753},{"type":715,"tag":20,"props":1760,"children":1761},{},[1762,1764,1770],{"type":719,"value":1763},"Также проверьте размер файла: ",{"type":715,"tag":50,"props":1765,"children":1767},{"className":1766},[],[1768],{"type":719,"value":1769},"wc -l output.txt",{"type":719,"value":70},{"type":715,"tag":626,"props":1772,"children":1773},{},[1774],{"type":719,"value":80}]