Bash - изменить текст в файле

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Ответить
Аватара пользователя
AMD
Сообщения: 478
Статус: Maestro
ОС: Linux Kubuntu 7.10
Контактная информация:

Bash - изменить текст в файле

Сообщение AMD »

есть файл /etc/default/linux-restricted-modules-common с содержимым

# This file is sourced from the linux-restricted-modules-common init
# script and is used to disable the link-on-boot feature, one module
# at a time. This can be useful if you want to use hand-compiled
# versions of one or more modules, but keep linux-restricted-modules
# installed on your system, or just to disable modules you don't use
# and speed up your boot process by a second or two.
#
# Use a space-separated list of modules you wish to not have linked
# on boot. The following example shows a (condensed) list of all
# modules shipped in the linux-restricted-modules packages:
#
# DISABLED_MODULES="ath_hal fc fglrx ltm nv"
#
# Note that disabling "fc" disables all fcdsl drivers, "ltm" disables
# ltmodem and ltserial, and "nv" disables both the nvidia drivers.
# You can also name each module individually, if you prefer a subset.

DISABLED_MODULES=""


хочу заменить строку DISABLED_MODULES="" на DISABLED_MODULES="nv nvidia_new"
вопрос как это сделать в bash?
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian
Контактная информация:

Re: Bash - изменить текст в файле

Сообщение diesel »

если только на bash:

cat file|while read i; do echo ${i//DISABLED_MODULES=\"\"/DISABLED_MODULES=\"nv nvidia_new\"}; done > newfile; mv newfile file;

можно sed-ом :)
sed -i -e 's/DISABLED_MODULES=""/DISABLED_MODULES="nv nvidia_new"/' file

можно perl'ом :)
perl -i -p -e 's/DISABLED_MODULES=""/DISABLED_MODULES="nv nvidia_new"/' file

индусский вариант на awk:

awk '/DISABLED_MODULES=""/{ print "DISABLED_MODULES=\"nv nvidia_new\""} !/DISABLED_MODULES=""/{print $0}' file > newfile; mv newfile file....
Спасибо сказали:
Аватара пользователя
malex
Сообщения: 374
ОС: debian

Re: Bash - изменить текст в файле

Сообщение malex »

"индусский вариант на awk:"

а почему индусский?
Ну вот, еще один день прошел, а мы все еще живы. И может быть стали умнее.
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian
Контактная информация:

Re: Bash - изменить текст в файле

Сообщение diesel »

malex писал(а):
21.09.2007 21:12
"индусский вариант на awk:"

а почему индусский?

есть более прямые, с использованием awk'ашных функций замены. :)
Спасибо сказали:
Аватара пользователя
Viper-2
Сообщения: 79
ОС: Debian 4.0, Linux 2.6.18-4-686

Re: Bash - изменить текст в файле

Сообщение Viper-2 »

А допустим я не знаю что стоит после = в строчке? еще и переменную вставить надо =)
в FILE : LINE1=TEXT1
пишу
TEXT2=text3
sed -i -e "s/LINE1=/LINE1=$TEXT2/" FILE
получаю файл : LINE1=text3TEXT1
как убрать старое значение то =)
RedHat 4.0, Debian 3.1, Open SuSE 10.1, Open SuSE 10.2, ASP Linux 11.2, Ubuntu 7.04, Debian 4.0, Open SuSE 10.3, Gentoo 2007, Ubuntu 7.10, Ubuntu 8.04!
Спасибо сказали:
sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5

Re: Bash - изменить текст в файле

Сообщение sergio »

Viper-2 писал(а):
29.09.2007 17:13
как убрать старое значение то =)

Чуть-чуть магии регэкспа, и золотой ключик у вас в кармане. =)
/varname="[^"]*"/varname="NEWVALUE"/
Примерно таким макаром. Заэкранировав все что надо есессно.
Ну или можно попроще там, типо
/varname=.*/varname="NEWVALUE"/
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian
Контактная информация:

Re: Bash - изменить текст в файле

Сообщение diesel »

Viper-2 писал(а):
29.09.2007 17:13
sed -i -e "s/LINE1=/LINE1=$TEXT2/" FILE

sed -i -e "s/LINE1=.*/LINE1=$TEXT2/" FILE
Спасибо сказали:
Ответить