Sed удалить символ в начале строки - PullRequest
0 голосов
/ 03 июля 2018

У меня есть следующий скрипт, который вставляет «#» перед IP-адресом в конфигурации nginx, чтобы действовать как комментарий.

#!/bin/bash
hosts=( 84.19.155.71 84.19.155.72 )
for i in "${hosts[@]}"
do
        CHECK=`grep $i nginx.conf`
        if [[ ! "$CHECK" =~ ^#.*$ ]]
        then
                nc -zw 5 $i 5044
                if [ "$?" != "0" ]
                then
                        sed -i "/$i/s/^/#/" nginx.conf
                else
                        sed -i 's/#*$i/$i/' nginx.conf
                fi
        fi
done

Он работает для вставки «#» в начале строки, но теперь я хочу удалить его, если код выхода команды nc равен 0. Я попробовал его с помощью своего оператора else, как показано выше, но нет помогло. Вот как выглядит nginx.conf:

user root;
worker_processes auto;
pid /run/nginx.pid;
load_module /usr/lib/nginx/modules/ngx_stream_module.so;


worker_rlimit_nofile 1000000;

events {
        worker_connections 20000;
        # multi_accept on;
}

stream {
log_format    basic    '$time_iso8601 $remote_addr '
                       '$protocol $status $bytes_sent $bytes_received '
                       '$session_time $upstream_addr '
                       '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';

# Enable access_log statements for debugging
access_log /var/log/nginx/stream.log basic;

  upstream syslog_udp {
    #hash $remote_addr;
    server 84.19.155.71:514 max_fails=2 fail_timeout=5s;
#    server 84.19.155.72:514 max_fails=2 fail_timeout=5s;
  }
  server {
    listen 514 udp;
    proxy_pass syslog_udp;
    proxy_responses 0;
    #proxy_timeout 2s;
    proxy_bind $remote_addr transparent;
    #proxy_next_upstream_timeout 2s;
  }
}

Может кто-нибудь помочь удалить символ "#" с IP-адреса?

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

если [[! "$ CHECK" = ~ ^ #. * $]] Это займет только те строки, которые не начинаются с "#" Возможно, вам придется вернуться к той части, которую я не буду обсуждать.

Но вот замена sed, которая может вам помочь.

user@machine:$cat sample 
server 84.19.155.71:514 max_fails=2 fail_timeout=5s;
#server 84.19.155.72:514 max_fails=2 fail_timeout=5s;

user@machine:$sed  "s/^#\(.*$i.*\)/\1/g" sample
server 84.19.155.71:514 max_fails=2 fail_timeout=5s;
server 84.19.155.72:514 max_fails=2 fail_timeout=5s;
0 голосов
/ 03 июля 2018

Во-первых, только первые строки, которые не начинаются с #, обрабатываются первым оператором if if [[ ! "$CHECK" =~ ^#.*$ ]]

Добавление # выглядит нормально, а для удаления вы можете попробовать:

sed -i "s/^#*$i//" nginx.conf
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...