Я хочу написать сценарий оболочки, в котором я мог бы прочитать файл из команды и отредактировать файл без ручного вмешательства (на основе поиска текста и замены его другим).
Мне не нужно использовать какой-либо текстовый редактор для этого ... просто текстовый поиск (например, использование grep), а затем его замену другим текстом и сохранение изменений ....
Очень поздний ответ. Однако это может помочь другим с аналогичной проблемой / вопросом.
Я бы рекомендовал создать и применить патч. Хороший пример можно найти здесь.
Например, если предположить, что файл 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
Если вы хотите отредактировать файл, используйте редактор файлов, есть текстовые редакторы на основе команд, которые могут использоваться из скриптов, например ex или ed.
Вы ищете 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В зависимости от того, что вам нужно изменить, если вы знакомы с vi, тогда ed может быть полезна.