I have a config file (/etc/my_config_file) which may content :
#
# port for HTTP (descriptions, SOAP, media transfer) traffic
port=8200
# network interfaces to serve, comma delimited
network_interface=eth0
# set this to the directory you want scanned.
# * if have multiple directories, you can have multiple media_dir= lines
# * if you want to restrict a media_dir to a specific content type, you
# can prepend the type, followed by a comma, to the directory:
# + "A" for audio (eg. media_dir=A,/home/jmaggard/Music)
# + "V" for video (eg. media_dir=V,/home/jmaggard/Videos)
# + "P" for images (eg. media_dir=P,/home/jmaggard/Pictures)
#media_dir=V,/srv/media/film
#media_dir=A,/srv/media/musique
#media_dir=P,/srv/media/photo
#media_dir = /home/some_user/my_personal_old_data
# set this if you want to customize the name that shows up on your clients
friendly_name=SJL DLNA Server MY_SERVER OPENSUSE 13.1
I have a variable which contains the token to search :
MY_TOKEN="media_dir"
I have a variable which contains the file to search in
MY_FILE="/etc/my_config_file"
I have a variable which contains the value for the searched token
I want to insert $MY_PARAMETER_VALUE, before the blank line and after the line : #media_dir = /home/some_user/my_personal_old_data
and the search token is $MY_TOKEN using some function like :
$ cat $MY_FILE
#
# port for HTTP (descriptions, SOAP, media transfer) traffic
port=8200
# network interfaces to serve, comma delimited
network_interface=eth0
# set this to the directory you want scanned.
# * if have multiple directories, you can have multiple media_dir= lines
# * if you want to restrict a media_dir to a specific content type, you
# can prepend the type, followed by a comma, to the directory:
# + "A" for audio (eg. media_dir=A,/home/jmaggard/Music)
# + "V" for video (eg. media_dir=V,/home/jmaggard/Videos)
# + "P" for images (eg. media_dir=P,/home/jmaggard/Pictures)
#media_dir=V,/srv/media/film
#media_dir=A,/srv/media/musique
#media_dir=P,/srv/media/photo
#media_dir = /home/some_user/my_personal_old_data
# set this if you want to customize the name that shows up on your clients
friendly_name=SJL DLNA Server MY_SERVER OPENSUSE 13.1
$ sed -e "/$MY_TOKEN/,/^[[:blank:]]*$/{" -e "\|^[[:blank:]]*$|s|.*|${MY_PARAMETER_VALUE}\n&|g" -e "}" $MY_FILE
#
# port for HTTP (descriptions, SOAP, media transfer) traffic
port=8200
# network interfaces to serve, comma delimited
network_interface=eth0
# set this to the directory you want scanned.
# * if have multiple directories, you can have multiple media_dir= lines
# * if you want to restrict a media_dir to a specific content type, you
# can prepend the type, followed by a comma, to the directory:
# + "A" for audio (eg. media_dir=A,/home/jmaggard/Music)
# + "V" for video (eg. media_dir=V,/home/jmaggard/Videos)
# + "P" for images (eg. media_dir=P,/home/jmaggard/Pictures)
#media_dir=V,/srv/media/film
#media_dir=A,/srv/media/musique
#media_dir=P,/srv/media/photo
#media_dir = /home/some_user/my_personal_old_data
media_dir = /srv/media/my_personal_new_data
# set this if you want to customize the name that shows up on your clients
friendly_name=SJL DLNA Server MY_SERVER OPENSUSE 13.1
Last line of file must a blank line.
To modified directly the file, you can use -i option if your sed support.
You just create a function that call this type de sed command.
Regards.
$ cat beforeblank.conf
#
# port for HTTP (descriptions, SOAP, media transfer) traffic
port=8200
# network interfaces to serve, comma delimited
network_interface=eth0
# set this to the directory you want scanned.
# * if have multiple directories, you can have multiple media_dir= lines
# * if you want to restrict a media_dir to a specific content type, you
# can prepend the type, followed by a comma, to the directory:
# + "A" for audio (eg. media_dir=A,/home/jmaggard/Music)
# + "V" for video (eg. media_dir=V,/home/jmaggard/Videos)
# + "P" for images (eg. media_dir=P,/home/jmaggard/Pictures)
#media_dir=V,/srv/media/film
#media_dir=A,/srv/media/musique
#media_dir=P,/srv/media/photo
#media_dir = /home/some_user/my_personal_old_data
# set this if you want to customize the name that shows up on your clients
friendly_name=SJL DLNA Server MY_SERVER OPENSUSE 13.1
$ bash test.sh
media_dir
media_dir = /srv/media/my_personal_new_data
#
# port for HTTP (descriptions, SOAP, media transfer) traffic
port=8200
# network interfaces to serve, comma delimited
network_interface=eth0
# set this to the directory you want scanned.
# * if have multiple directories, you can have multiple media_dir= lines
# * if you want to restrict a media_dir to a specific content type, you
# can prepend the type, followed by a comma, to the directory:
# + "A" for audio (eg. media_dir=A,/home/jmaggard/Music)
# + "V" for video (eg. media_dir=V,/home/jmaggard/Videos)
# + "P" for images (eg. media_dir=P,/home/jmaggard/Pictures)
#media_dir=V,/srv/media/film
#media_dir=A,/srv/media/musique
#media_dir=P,/srv/media/photo
#media_dir = /home/some_user/my_personal_old_data
media_dir = /srv/media/my_personal_new_data
# set this if you want to customize the name that shows up on your clients
friendly_name=SJL DLNA Server MY_SERVER OPENSUSE 13.1