Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » UNIX » Правка текстового файла средствами терминала

Модерирует : ShriEkeR

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

ILYA INDIGO



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Имеем текстовый файл /tmp/test, состоящий из 13 строк.
Нужно после 10-ой строки вставить строку "This string" (эта строка станет 11-ой в файле, который уже будет содержать 14 строк).
Как это сделать не используя консольных текстовых редакторов, таких как nano, vim и им подобным, а сделать это, командами cat, cut и им подобными, в идеале, не создавая промежуточного файла?

Всего записей: 38 | Зарегистр. 18-11-2007 | Отправлено: 18:19 19-07-2012 | Исправлено: ILYA INDIGO, 18:22 19-07-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ILYA INDIGO
ахаха)
Кто-то пытается пройти тест ideco на сисадмина слегка переформулировав вопрос?)
Ты забыл сказать, что там нету sed и awk.
 
А как это сделать прошу знающий народ умолчать до 1августа кажется.

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 18:37 19-07-2012 | Исправлено: Alukardd, 18:38 19-07-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
> тест ideco на сисадмина
А можно ссылку? Я что-то не могу найти актуального конкурса — только за 2008 и 2009 года.
 
> прошу знающий народ умолчать
Да к чему жмотиться-то?

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 19:08 19-07-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
ы)
Да уже не к чему(
На хбаре слишком много обсуждений...
admin2012.ru
 
ILYA INDIGO
Если еще актуально напишу как это сделал на чистом shell без хитростей busybox.
 
Варианты наверное есть как и в любом скриптовом решении, но я сделал так:
x=1; while read line; do echo $line >> text.txt2; if [ $x -eq 599 ]; then echo "тут та самая строка" >> text.txt2; fi; let x++; done < text.txt
Ну а потом просто переместил файлы mv и всё.

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 19:13 19-07-2012 | Исправлено: Alukardd, 23:02 19-07-2012
ILYA INDIGO



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я изначально решил у себя эту задачу через patch, но там он не запускается (команда patch есть на --help реагирует но данным способом не пачит, в stdout ничего не пишет просто молчит и по команде wc понимаю, что она ничего не пропачитла).
Код:
echo -e "10a11\n> This string" > /tmp/test.diff && patch /tmp/test /tmp/test.diff

Может быть я что то не учёл в diff-файле для shell?
Код:
10a11
> This string

А вообще красивее всего, конечно делается через sed
Код:
sed -i "10aThis string" /tmp/test

Но sed там не пашет...
Там да же cat -n не пашет...

Всего записей: 38 | Зарегистр. 18-11-2007 | Отправлено: 00:49 20-07-2012 | Исправлено: ILYA INDIGO, 01:10 20-07-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Указывая, что решить надо Coreutils’ами («командами cat, cut и им подобными»), они, видимо, имеют в виду что-то такое:
$ ( head -10 && echo 'This string' && tail -3 ) < /tmp/test
 
Теперь что касается редактирования in place, без промежуточных файлов. Для начала проверьте, а нет ли там утилитки sponge из Moreutils’ов, специально для этого предназначенной.
$ ( head -10 && echo 'This string' && tail -3 ) < /tmp/test | sponge /tmp/test

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 08:28 20-07-2012
ILYA INDIGO



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
На самом деле там так же head и tail даже нету, я первым делом ввёл tail 10, это первое что пришло на ум.
Я написал скрипт, предложенный Alukardd, так как там не просто нужно решить задачу, а догадаться как эту задачу решили они.
Код:
rm -rf test.tmp;x=1;while read line;do echo $line>>test.tmp;if [ $x -eq 10 ];then echo "This string">>test.tmp;fi;let x++;done<test;mv test.tmp test;

А sponge у меня и в openSUSE нету.

Всего записей: 38 | Зарегистр. 18-11-2007 | Отправлено: 16:23 20-07-2012 | Исправлено: ILYA INDIGO, 16:26 20-07-2012
Decker82



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В конкурсе это можно сделать двумя командами - split, cat. С промежуточными файлами ... сначала пишем 599 строк во временный файл, затем добавляем нужную, а потом дописываем окончание. Кому интересно пообсуждать сам конкурс - это можно сделать тут, правда если не хотите спойлеров и готовых решений - не заходите

Всего записей: 496 | Зарегистр. 14-04-2007 | Отправлено: 19:27 20-07-2012 | Исправлено: Decker82, 19:39 20-07-2012
q111111

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
 

Всего записей: 1657 | Зарегистр. 05-03-2008 | Отправлено: 13:06 27-07-2012 | Исправлено: q111111, 21:32 14-10-2013
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
q111111
В своей голове и гугле.

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 13:16 27-07-2012
q111111

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
 

Всего записей: 1657 | Зарегистр. 05-03-2008 | Отправлено: 15:52 27-07-2012 | Исправлено: q111111, 21:32 14-10-2013
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Операционные системы » UNIX » Правка текстового файла средствами терминала


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru