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

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

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

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

5 ответов

Вот где вступает в игру sed . Команда sed имеет следующий формат:

[pattern1][,pattern2][!] command [args]

Она использует регулярные выражения, поэтому это может / будет немного сложно. Некоторые базовые примеры взяты из 2-й ссылки ниже:

# substitute (find and replace) "foo" with "bar" on each line
sed 's/foo/bar/' # replaces only 1st instance in a line
sed 's/foo/bar/4' # replaces only 4th instance in a line
sed 's/foo/bar/g' # replaces ALL instances in a line
sed 's/\(.*\)foo\(.*foo\)/\1bar\2/' # replace the next-to-last case
sed 's/\(.*\)foo/\1bar/' # replace only the last case

# substitute "foo" with "bar" ONLY for lines which contain "baz"
sed '/baz/s/foo/bar/g'

# substitute "foo" with "bar" EXCEPT for lines which contain "baz"
sed '/baz/!s/foo/bar/g'

# change "scarlet" or "ruby" or "puce" to "red"
sed 's/scarlet/red/g;s/ruby/red/g;s/puce/red/g' # most seds
gsed 's/scarlet\|ruby\|puce/red/g' # GNU sed only

Некоторые ссылки

10
ответ дан 30 June 2017 в 05:04

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

0
ответ дан 30 June 2017 в 05:04

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

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

Например, предположим, что файл 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
8
ответ дан 30 June 2017 в 05:04

Вы ищете 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
ответ дан 30 June 2017 в 05:04

Если вы хотите отредактировать файл, используйте редактор файлов. Существуют редакторы файлов на основе команд, которые можно использовать из сценариев, например ex или ed .

1
ответ дан 30 June 2017 в 05:04

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

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