nixp.ru v3.0

21 января 2017,
суббота,
20:32:01 MSK

DevOps с компанией «Флант»
HanTengry написал 30 сентября 2008 года в 16:51 (328 просмотров) Ведет себя как мужчина; открыл 36 тем в форуме, оставил 111 комментарий на сайте.

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

Не допонимаю последовательность команд. Думаю что нужно пользоваться командой sed но не могу догадаться как сохранить.

Вот пример:

sed -n ’s/Login/LOGIN/p' /home/primer.sh

Ну то есть если это расшифровать: беру первое попашееся в файле слово Login меняю регистр на LOGIN и вывожу на экран в измененом виде эту строку. А как проделать это изменение и сохранить новую версию файла? Флаг w к сожалению запишет в указаный файл только измененую строку, а надо целиком.

// Тему переместил(а) Dmitry Shurupov из форума «UNIX FAQ: вопросы по UNIX/Linux».

Anarchist

Можно через перенаправление и временный файл:

FILE=/home/primer.sh
TEMPFILE=/home/tempfile
sed -n 's/Login/LOGIN/p' $FILE > $TEMPFILE
mv $TEMPFILE $FILE
Curu3MyHg


sed -i -e 's/aaa/bbb/g' $FILENAME

?

HanTengry

Anarchist спасибо! но..

Наверно нужно было поменять местами: mv $FILE $TEMPFILE, а иначе новый файл не появляется, но и в этом варианте в новый файл попали только строки которые были отредактированы..те строки которые не были пропущены..

Anarchist
HanTengry
Anarchist спасибо! но..

Всегда пожалуйста :)

И никаких «но»! :)

HanTengry
Наверно нужно было поменять местами: mv $FILE $TEMPFILE

Нет.

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

Интересно…

В таком режиме с sed’ом не баловался.

Так что: читать руководства по sed && awk (полагаю, достаточное количество в достаточно товарном качестве ищется на http://tldp.org/).

Далее: чтобы понять логику работы sed'а рекомендуется поиграться с редактированием текстовых файлов ed'ом.

Ну и применительно к данному случаю в режиме, который знаю и использую я задача решается так

FILE=/home/primer.sh
TEMPFILE=/home/tempfile
#
cat $FILE | sed 1,$s/Login/LOGIN/ > $TEMPFILE
mv $TEMPFILE $FILE

Что оно делает и как модифицировать к твоим потребностям — разберёшься самостоятельно :)

Возможно — уйдёшь в познаниях sed куда дальше меня.

Curu3MyHg

Зачем так сложно-то?

Чем не нравится вариант с

$ sed -i bla-bla-bla

?

$ man sed
....
       -i[SUFFIX], --in-place[=SUFFIX]
              edit files in place (makes backup if extension supplied)
....
Anarchist
Curu3MyHg
Зачем так сложно-то?

Чем не нравится вариант с

$ sed -i bla-bla-bla

За тем, что скрипт учебный.

И вопрошающему надо с самого начала заложить в голову, что sed ориентирован на работу в первую очереди с stdin.

ecobeingecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.