Как программно редактировать файл, используя только терминал?

Я хочу написать сценарий оболочки, в котором я мог бы прочитать файл из команды и отредактировать файл без ручного вмешательства (на основе поиска текста и замены его другим).

Мне не нужно использовать какой-либо текстовый редактор для этого ... просто текстовый поиск (например, использование grep), а затем его замену другим текстом и сохранение изменений ....

1
задан 30 June 2017 в 05:04

4 ответа

Очень поздний ответ. Однако это может помочь другим с аналогичной проблемой / вопросом.

Я бы рекомендовал создать и применить патч. Хороший пример можно найти здесь.

Например, если предположить, что файл new.txt содержит изменения, которые вы хотите применить к old.txt. Вы можете выполнять команды на терминале или создавать и выполнять patch_file.sh.

Командная строка: откройте терминал и скопируйте и выполните строки ниже (измените имена файлов по мере необходимости):

diff old.txt new.txt > patch.patch # to create the patch
patch old.txt -i patch.patch -o patched_old.text # to apply patch

Сценарий: с использованием .sh-файла. В терминале (клавиатура: ctrl + alt + t: gedit patch_file.sh

Скопируйте и вставьте команды, которые будут поступать на терминал, в .sh-файл и под заголовком, как показано ниже (gedit).

#!/bin/sh
diff old.txt new.txt > patch.patch # to create the patch
patch old.txt -i patch.patch -o patched_old.text # to apply patch

Сделать исполняемый файл сценария (терминал):

chmod +x patch_file.sh

Запустить сценарий (терминал):

./patch_file.sh # may require sudo access depending on the directory affected
3
ответ дан 25 May 2018 в 10:25
  • 1
    +1 патч всегда является прямым способом для средних и тяжелых или сложных модификаций. Я не знаю, почему некоторые пытаются сделать все, используя инструменты regex. – user.dz 17 June 2016 в 17:53

Если вы хотите отредактировать файл, используйте редактор файлов, есть текстовые редакторы на основе команд, которые могут использоваться из скриптов, например ex или ed.

1
ответ дан 25 May 2018 в 10:25

Вы ищете sed или awk. Я считаю, что sed будет проще и awk, чтобы быть более мощным.

Вот пример из другого вопроса.

sed -i 's/gedit.desktop/yournew.desktop/g' /usr/share/applications/defaults.list

Это означает:

поиск в файле /usr/share/applications/defaults.list Найти / grep gedit.desktop Заменить с помощью yournew.desktop Применить изменения на место -i
1
ответ дан 25 May 2018 в 10:25

В зависимости от того, что вам нужно изменить, если вы знакомы с vi, тогда ed может быть полезна.

0
ответ дан 25 May 2018 в 10:25

Другие вопросы по тегам:

Похожие вопросы: