Home > Blockchain >  SED pattern matching
SED pattern matching

Time:12-08

I am trying to modify NGINX config file using sed. I wand to replace the values of ssl_certificate and ssl_certificate_key

config="/etc/nginx/httpd.conf"
certfile="server.pem"
keyfile="key.pem"

sed -i -e "s/\(ssl_certificate *\/etc\/pki\/nginx\/\).*/\1$certfile/" $config
sed -i -e "s/\(ssl_certificate_key *\/etc\/pki\/nginx\/private\/\).*/\1$keyfile/" $config

With the starting lines that I want to modify looking like this

ssl_certificate /etc/pki/nginx/selfsigned.crt;
ssl_certificate_key /etc/pki/nginx/private/selfsigned.key;
ssl_dhparam /etc/pki/nginx/dhparam.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

I end up with

ssl_certificate /etc/pki/nginx/server.pem
ssl_certificate_key /etc/pki/nginx/server.pem
ssl_dhparam /etc/pki/nginx/server.pem
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

What I am trying to achieve is to substitute selfsigned.crt with server.pem and selfsigned.key with key.pem to achieve

ssl_certificate /etc/pki/nginx/server.pem
ssl_certificate_key /etc/pki/nginx/key.pem
ssl_dhparam /etc/pki/nginx/dhparam.pem
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

Please, advise. TIA

CodePudding user response:

Using sed

$ sed "/certificate/s|\(.*/\).*\(.$\)|\1$certfile\2|" input_file
ssl_certificate /etc/pki/nginx/server.pem;
ssl_certificate_key /etc/pki/nginx/private/server.pem;
ssl_dhparam /etc/pki/nginx/dhparam.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

Match lines with certificate and carry out the substitution on those lines.

CodePudding user response:

I got it:

cat /etc/nginx/httpd.conf | sed -e "s/\(ssl_certificate *\/etc\/pki\/nginx\/\).*/\1$certfile/" -e "s/\(ssl_certificate_key *\/etc\/pki\/nginx\/private\/\).*/\1$keyfile/"

server {
    listen 443 default_server ssl;
    server_name _;
    root /usr/share/nginx/html;


    ssl_certificate /etc/pki/nginx/server.pem
    ssl_certificate_key /etc/pki/nginx/private/key.pem
    ssl_dhparam /etc/pki/nginx/dhparam.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  • Related