Изменить строки в файле без участия пользователя

skelet
Дата: 03.03.2010 18:14:13
есть некий /etc/fstab -)
хотелось бы произвести следующую операцию:

узнать смонтировано ли там некоторое устройство , напр /dev/xxx если нет то добавить строку, а если есть - изменить некоторые параметры, в частности четвёртое поле fs_mntops с опциями монтирования (там где обычно defaults) . Желательно не создавать новый изменённый, а править текущий.

Это возможно в баше или лучше сразу писать на сях и не заморачиваться?
kvasandrew
Дата: 03.03.2010 19:54:27
Да возможно в баше. с пересозданием самый простой и очевидный способ.
Dimitry Sibiryakov
Дата: 03.03.2010 19:57:10

Проверить наличие строки это grep. Изменить строку это sed или awk.

Posted via ActualForum NNTP Server 1.4

skelet
Дата: 04.03.2010 12:15:17
Dimitry Sibiryakov

Проверить наличие строки это grep. Изменить строку это sed или awk.

ну вы прям секрет открыли, а по подробней? особенно в плане как заставить sed писать в текущий файлик... ?
avb1003
Дата: 04.03.2010 12:23:05
skelet
...
ну вы прям секрет открыли, а по подробней? особенно в плане как заставить sed писать в текущий файлик... ?
А в чем "кайф", чтобы прямо в текущий? Чем плохо создать исправленную копию с последующим переименованием?
skelet
Дата: 04.03.2010 16:39:04
avb1003
skelet
...
ну вы прям секрет открыли, а по подробней? особенно в плане как заставить sed писать в текущий файлик... ?
А в чем "кайф", чтобы прямо в текущий? Чем плохо создать исправленную копию с последующим переименованием?

да приходится уже, с помощью awk , только вот осталось понять, как в awk передать переменную из баша.

export SIZE не прокатывает...

если кто знает - подскажите, только в этом осталась загвоздка


res=$(awk '{ t="SIZE"; if (($2=="/dev/shm") && ($4=="defaults"))
                 { print ( $1,"\t\t",$2,"\t",$3,"\t",t,"\t",$5,"\t",$6 )  }
             else
                 { print }   }' $filename)
avb1003
Дата: 04.03.2010 19:37:58
skelet
... только вот осталось понять, как в awk передать переменную из баша.

export SIZE не прокатывает...
"export SIZE" - это чтобы передать. Передать в любой процесс, запускаемый bash.
skelet
...
если кто знает - подскажите, только в этом осталась загвоздка
Проблема может быть только в том, как "получить". Для GNU Awk 3.1.6:
man gawk
...
ENVIRON An array containing the values of the current environment.
The array is indexed by the environment variables, each
element being the value of that variable (e.g., ENVI-
RON["HOME"] might be /home/arnold). Changing this array
does not affect the environment seen by programs which gawk
spawns via redirection or the system() function.
...
А еще лучше, IMHO, перейти на perl. См. man perlrun, ключи -e,-i, -n, -p.
мимо крокодил
Дата: 05.03.2010 04:51:16
skelet

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

замена в файле при помощи sed, например:
$ sed -i 's/ЧТО/ЧЕМ/g' file.txt
g - опционально (заменить все вхождения), если не указывать - заменит только первое вхождение
avb1003
Дата: 05.03.2010 11:52:37
мимо крокодил,
В маn-е по sed(в отличие от man-а по perl) это явно не сказано, но эксперименты показывают, что
ключ -i приводит к созданию нового файла, а не редактированию уже существующего.
Подумалось...
Дата: 05.03.2010 13:11:24
RLY?

man sed

-i[SUFFIX], --in-place[=SUFFIX]

edit files in place (makes backup if extension supplied)