Hello! I have a shell script that I use to install BackupPC. It takes a standard CentOS installation and performs the configuration that I would normally do to install BackupPC. There are probably way better ways of doing this, but this is the way I've chosen.
As part of this script, I use sed to modify certain configuration files. My sed-fu is weak, however, and I've only gotten it to do the most basic things: insert static text immediately after a simple string match. For example, something like this: sed -i.org 's/^[ #]*PermitRootLogin *.*$/#&\nPermitRootLogin no/' /etc/ssh/sshd_config What I'm trying to do is search a configuration file for zero or more occurrences of a particular configuration element (either commented out or not), prepend a # to all of them (again, commented out or not), and append the proper configuration line. The line above works under extremely narrow circumstances, but it's very fragile. Does anyone have a good way to do this (sed or otherwise) from within a (bash) shell script? That's my question. If you already know the answer, then stop reading here and e-mail me the solution! :) Otherwise, here's an example of what I'm looking for: Here is a sample configuration file simplified from sshd_config: #Example of a greatly reduced sshd_config #Protocol 2,1 Protocol 2 #Additional lines here #PermitRootLogin yes #Additional lines here I want to alter this in two ways: 1) comment out all Protocol lines and add a line "Protocol 2". (Yes, I know it already says this. Pretend that I want Protocol 1, if it helps.) 2) comment out all PermitRootLogin lines and add a "PermitRootLogin no" In the end, I'd like to see this: #Example of a greatly reduced sshd_config ##Protocol 2,1 #Protocol 2 Protocol 2 #Additional lines here ##PermitRootLogin yes PermitRootLogin no #Additional lines here With the sed line I've outlined at the top, it will add a # to the beginning of *every* e.g. PermitRootLogin line and add the proper line right below that. It only works right now because there's only one PermitRootLogin line. But it falls down terribly if there are more than one, such as with the Protocol line. AFAICT, there's no way to tell sed to either add text only at the last match (which I can understand, it's hard to know if it will be the last match until the end, and by then it's too late), or to stop editing after the first match and merely dump the rest of the file into the output. Without being able to do either of these things, I'm stuck... Ideas? Tim Massey ------------------------------------------------------------------------------ Come build with us! The BlackBerry® Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9-12, 2009. Register now! http://p.sf.net/sfu/devconf _______________________________________________ BackupPC-users mailing list BackupPC-users@lists.sourceforge.net List: https://lists.sourceforge.net/lists/listinfo/backuppc-users Wiki: http://backuppc.wiki.sourceforge.net Project: http://backuppc.sourceforge.net/