Шаблон поиска в awk - PullRequest
       8

Шаблон поиска в awk

0 голосов
/ 20 ноября 2018

Я хочу создать скрипт таким образом, чтобы он проверял условия:

  1. В файле должна присутствовать строка порта, и если да, то ее значение должно быть 20000.

  2. В файле должно быть упоминание sslkey, sslCert, ssl_cipher (значения для этих строк / ключей могут быть любыми).

Была сделана попытка:

$ awk '/port|sslKey|sslCert|ssl_cipher/ {print $2,$3}' pkg.conf
port 20000
sslKey /usr/product/plat/etc/ssl/server.pem
sslCert /usr/product/plat/etc/ssl/server.cert
ssl_cipher ECDH+AES128:ECDH+AESGCM:ECDH+AES256:DH+AES:DH+AESGCM:DH+AES256:RSA+AES:RSA+AESGCM:!aNULL:!RC4:!MD5:!DSS:!3DES

Проблема с вышеприведенной командой заключается в том, что даже если одна из строк 'port | sslKey | sslCert | ssl_cipher' отсутствует даже тогда, когда она выполняется.

Может ли это быть достигнуто с использованием тольконесколько строк awk.

Если какая-либо строка / условие отсутствует, то в выходных данных должно отображаться это условие, а также условия, которые выполнены.

1 Ответ

0 голосов
/ 20 ноября 2018

Учитывая Ваши данные в вопросах, здесь приведены примеры ввода:

Правильно:

$ cat pkg.conf
port 20000
sslKey /usr/product/plat/etc/ssl/server.pem
sslCert /usr/product/plat/etc/ssl/server.cert
ssl_cipher ECDH+AES128:ECDH+AESGCM:ECDH+AES256:DH+AES:DH+AESGCM:DH+AES256:RSA+AES:RSA+AESGCM:!aNULL:!RC4:!MD5:!DSS:!3DES

Неверно (порт 18000 и отсутствует sslCert):

$ cat pkg_wrong.conf
port 18000
sslKey /usr/product/plat/etc/ssl/server.pem
ssl_cipher ECDH+AES128:ECDH+AESGCM:ECDH+AES256:DH+AES:DH+AESGCM:DH+AES256:RSA+AES:RSA+AESGCM:!aNULL:!RC4:!MD5:!DSS:!3DES

Решение AWK:

Исправить pkg.conf.Возвращает 0 и ничего не выводит:

$ awk '
/^port [0-9]+$/ { if ( $2 == 20000 ) isport=1; port=$2; }
/^sslKey .+$/ { issslKey=1; sslKey=$2; }
/^sslCert .+$/ { issslCert=1; sslCert=$2; }
/^ssl_cipher .+$/ { isssl_cipher=1; ssl_cipher=$2; }
END { if (isport && issslKey && issslCert && isssl_cipher) exit(0);
      else { print("port " port); print("sslKey " sslKey); print("sslCert " sslCert); print("ssl_cipher " ssl_cipher); exit(1); }
    }
' pkg.conf

Неверно pkg_wrong.conf (порт 18000 и отсутствует sslCert):

$ awk '
/^port [0-9]+$/ { if ( $2 == 20000 ) isport=1; port=$2; }
/^sslKey .+$/ { issslKey=1; sslKey=$2; }
/^sslCert .+$/ { issslCert=1; sslCert=$2; }
/^ssl_cipher .+$/ { isssl_cipher=1; ssl_cipher=$2; }
END { if (isport && issslKey && issslCert && isssl_cipher) exit(0);
      else { print("port " port); print("sslKey " sslKey); print("sslCert " sslCert); print("ssl_cipher " ssl_cipher); exit(1); }
    }
' pkg_wrong.conf
port 18000
sslKey /usr/product/plat/etc/ssl/server.pem
sslCert
ssl_cipher ECDH+AES128:ECDH+AESGCM:ECDH+AES256:DH+AES:DH+AESGCM:DH+AES256:RSA+AES:RSA+AESGCM:!aNULL:!RC4:!MD5:!DSS:!3DES
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...