LINUX.ORG.RU

Bash скрипт. Редактирование файлов

 , , ,


0

1

Всем доброго времени суток!

Сижу на Ubuntu 14.10, т.к. это единственная версия, которая согласилась установиться на мой ноут. По-скольку версия не самая стабильная, есть пара косяков по софту, в частности после обновления некоторые файлы того-же хрома приходится редактировать вручную. Собственно задался вопросом, а не написать ли под это дело скрипт, чтобы делал за меня всю работу. Но, к несчастью, скриптописательством раньше не занимался, а все уроки по bash похожи на урок по рисованию совы: нарисуйте овал, добавьте деталей, готово. Конечно, что-то я смог сам разобрать, но есть одна задачка, решение которой я себе пока не представляю. Собственно: есть файл в директории /usr/share/applications/ , который редактируется под админом, в файле 225 строк, задача состоит в том, чтобы вставить одну и тот же код (1 строчка) в строку 116, 172 и 226. Если кто сможет предложить решение, я буду благодарен, а если при этом еще и на пальцах разжует как оно работает, получит много плюсов к карме))

Заранее благодарен!

на баше давно не писал,а вот на прлюсах такой костыль,за 2 минуты пишется,с учетом перекура :)

tux-eda ()

Так заменить или вставить?
Если ты вставляешь строку в 116, то предыдущая 116 становится 117, 172 становится 173, а 225 становится 226

zolden ★★★★★ ()
Ответ на: комментарий от finkostiel

больше по вебу

Так пиши на ПХП. Ты будешь ржать, но для очень многих админских скриптов он подходит значительно лучше, чем баш.

Stahl ★★☆ ()
Ответ на: комментарий от Stahl

теже яйца,только в профиль,там хоть на питоне,быстродействие тут не очень важно,да и разница в доли секундах

tux-eda ()
seq -w 1 15 | awk '{ 
 if (NR == 3 ) { print "insert before line03" };
 if (NR == 8 ) { print "insert before line08" };
 print $0  
 if (NR == 5 ) { print "insert after line05" };
 if (NR == 12 ) { print "insert after line12" };
}
END { print "insert after all input lines";}'

код в одиночных кавычкаx можно собрать в отдельный script.awk и не наступайте на ошибку типа когда входной файл= выходной файл, типа grep pattern myfile > myfile,

awk -f script.awk oldfile > newfile && cat newfile > oldfile && rm oldfile 

bl ★★★ ()
Последнее исправление: bl (всего исправлений: 4)
Ответ на: комментарий от tux-eda

Можно смещать, можно не смещать (в этих местах в файле пустые строчки). Главное, чтобы в определенных местах файла появилась строчка.

finkostiel ()
Ответ на: комментарий от finkostiel

Вроде удалось решить вопрос с помощью sed -i '#i Text injection ' /usr/share/applications/filename. Но sed после вставки делает перенос на следующую строку, чем меняет номер всех последующих строк. Сделал так, чтобы вставки делались с конца, все заработало. Но мне кажется это не самое изящное решение, не так ли?)

finkostiel ()
Ответ на: комментарий от finkostiel

встретились как-то программист на ruby и программист на rails

anonymous ()

вставить одну и тот же код (1 строчка) в строку 116, 172 и 226.

sed '116bl;172bl;226bl;b;:l;a STRING'
emulek ()
Ответ на: комментарий от finkostiel

Но sed после вставки делает перенос на следующую строку, чем меняет номер всех последующих строк.

не меняет. Sed создаёт _новый_ файл, из старого. А потом удаляет старый (с ключом -i).

emulek ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.