Как заменить 5-ю строку нескольких текстовых файлов одной командой в Bash

Убунту 19

В области системного администрирования и программирования Bash является мощным инструментом, который может значительно упростить задачи. Одной из таких задач является замена определенной строки в нескольких текстовых файлах с помощью одной команды. Эта статья проведет вас через процесс замены 5-й строки нескольких текстовых файлов с помощью Bash. Мы рассмотрим различные инструменты командной строки, такие как Perl, sed, awk и coreutils.

Использование Perl

Perl — это высокоуровневый интерпретируемый динамический язык программирования общего назначения. Он отлично справляется с обработкой текста и может использоваться для замены 5-й строки нескольких текстовых файлов. Вот как:

perl -i -pe ‘s/.*/Доброе утро/ if $.==5’ file{1..4}.txt

В этой команде -i включает редактирование на месте, -pe означает печать и выполнение, s/.*/Доброе утро/ заменяет любую строку на «Доброе утро», и если $.==5 указывает, что операция должна быть выполняется на 5-й строке. file{1..4}.txt указывает файлы, которые необходимо изменить.

Использование sed

sed, сокращенно от потокового редактора, представляет собой мощную утилиту Unix, которая анализирует и преобразует текст. Вот как вы можете использовать sed для замены 5-й строки нескольких текстовых файлов:

sed -i ‘5s/.*/Доброе утро/’ файл{1..4}.txt

В этой команде -i включает редактирование на месте, 5s указывает, что операция должна выполняться на 5-й строке, /.*/Доброе утро/ заменяет любую строку на «Доброе утро», а файл {1..4}. txt указывает файлы, которые нужно изменить.

Использование Awk

Awk — универсальный язык программирования, предназначенный для сканирования и обработки шаблонов. Вот пример того, как использовать Awk для замены 5-й строки нескольких текстовых файлов:

для f в файле {1..4}.txt; сделать awk ‘NR==5{$0=”Доброе утро”}1;’ “$f” > foobar && mv foobar “$f”; сделанный

В этом сценарии для f in file{1..4}.txt перебираются указанные файлы, awk ‘NR==5{$0=”Доброе утро”}1;’ «$f» заменяет 5-ю строку каждого файла на «Доброе утро», а > foobar && mv foobar «$f» создает временный файл и заменяет исходный файл.

Использование coreutils

Coreutils — это пакет утилит GNU, включающий инструменты для работы с файлами. Вот как вы можете использовать coreutils для замены 5-й строки нескольких текстовых файлов:

для f в файле {1..4}.txt; do (head -4 “$f”; echo “Доброе утро”; tail -n +6 “$f”) > foobar && mv foobar “$f”; сделанный

В этом скрипте for f in file{1..4}.txt перебирает указанные файлы (head -4 “$f”; echo “Доброе утро”; tail -n +6 “$f”) заменяет 5-й строка каждого файла с «Доброе утро», и > foobar && mv foobar «$f» создает временный файл и заменяет исходный файл.

Заключение

Замена определенной строки в нескольких текстовых файлах не должна быть сложной задачей. С помощью правильных инструментов командной строки и небольшого количества сценариев Bash вы можете легко автоматизировать этот процесс. Предпочитаете ли вы Perl, sed, awk или coreutils, выбор за вами. Не забывайте всегда делать резервные копии файлов перед выполнением любых массовых операций, чтобы предотвратить потерю данных.

Дополнительные сведения о написании сценариев Bash см. Руководство по GNU Bash. Для получения более подробной информации об инструментах командной строки, используемых в этой статье, обратитесь к справочным страницам (man perl, man sed, man awk, man coreutils).

Нет, эти команды в первую очередь предназначены для систем на базе Unix, таких как Linux и macOS. Однако вы можете использовать их в Windows, если у вас установлена ​​среда Bash, например Git Bash или Cygwin.

Вы можете использовать подстановочные знаки, чтобы указать несколько файлов одновременно. Например, файл*.txt будет соответствовать всем файлам, начинающимся с «файл» и заканчивающимся на «.txt». Просто убедитесь, что шаблон подстановочных знаков соответствует файлам, которые вы хотите изменить.

Это зависит от команды и используемых опций. Команда Perl (perl -i) и команда sed (sed -i) изменяют исходные файлы на месте. Однако они также могут создавать резервные копии исходных файлов, если вы укажете расширение после параметра -i, например -i.bak. Команды Awk и coreutils в примерах создают временные файлы, а затем заменяют исходные файлы, эффективно изменяя их на месте.

Да, вы можете изменить номер строки в командах, чтобы заменить другую строку. Например, изменение 5s на 3s в команде sed заменит 3-ю строку вместо 5-й. Точно так же вы можете изменить NR==5 на другой номер строки в команде Awk или соответствующим образом изменить номера строк в команде coreutils.

Абсолютно! Вы можете заменить строку любой строкой, изменив строку замены в командах. Например, изменение «Доброе утро» на «Привет, мир!» заменит строку этой фразой. Просто не забудьте экранировать любые специальные символы или использовать соответствующие кавычки, если ваша строка замены их содержит.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *