У меня есть файл с несколькими строками. То, что я пытаюсь сделать, это добавить строку в конце коммандос.

У меня есть скрипт, который устанавливает инструмент автоматически. Теперь некоторые вещи имеют изменения в источниках. Мне нужно добавить contrib non-free в конце этой строки:

deb http://ftp.us.debian.org/debian/ wheezy main

Стоит посмотреть на это:

deb http://ftp.us.debian.org/debian/ wheezy main contrib non-free

Как я могу сделать это?

1 ответ1

2

Поскольку вы используете Linux, у вас будет версия sed для GNU (в которой есть опция -i для редактирования файлов на месте):

sed -i '/deb http:\/\/ftp.us.debian.org\/debian\/wheezy main/s/$/ contrib non-free/' file.sh

В команде sed содержимое между первыми двумя // указывает sed искать строку, содержащую это, поэтому sed '/foo/' будет искать строки, содержащие 'foo'. Поскольку ваша строка содержит косые черты, их необходимо экранировать. s/$/ contrib non-free указывает sed заменить конец строки (представленный знаком доллара) на «contrib non-free». Общая форма s/replace this/with this/ . Взятые вместе, это ищет строки, которые вы хотите, а затем прикрепляет ваш текст в конец.

Если вы просто хотите изменить конец каждой строки в файле:

sed -i 's/$/ contrib non-free/'

Использование стандартного текстового редактора ed немного более переносимо, но в целом вы будете чаще использовать sed для этих задач (или, предпочтительно, приличный текстовый редактор, такой как vim).

printf '%s\n' 'g/deb http:\/\/ftp.us.debian.org\/debian\/wheezy main/s/$/ contrib non-free/' w q | ed file.sh

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .