Добавить строку в каждый соответствующий шаблон, начиная с нескольких символов - PullRequest
0 голосов
/ 06 октября 2019

Я пытаюсь добавить строку '_SOMETHING' к каждой существующей строке в файле, начиная с 'check_nrpe_aix', используя awk или sed

До:

define command {
        command_name    check_nrpe_aix_load
        command_line    $USER1$/check_nrpe -p $USER11$ -H $HOSTADDRESS$ -a $ARG1$ $ARG2$ ARG3$
        }

define command {
        command_name   check_nrpe_aix_cpu_stats
        command_line    $USER1$/check_nrpe -p $USER11$ -H $HOSTADDRESS$ -a $ARG1$ $ARG2$
        }

После:

define command {
        command_name    check_nrpe_aix_load_SOMESTRING
        command_line    $USER1$/check_nrpe -p $USER11$ -H $HOSTADDRESS$ -a $ARG1$ $ARG2$ ARG3$
        }

define command {
        command_name   check_nrpe_aix_cpu_stats_SOMESTRING
        command_line    $USER1$/check_nrpe -p $USER11$ -H $HOSTADDRESS$ -a $ARG1$ $ARG2$
    }

Ответы [ 2 ]

1 голос
/ 06 октября 2019

Я поместил ваш пример в файл с именем input.txt

$ cat input.txt 
define command {
        command_name    check_nrpe_aix_load
        command_line    $USER1$/check_nrpe -p $USER11$ -H $HOSTADDRESS$ -a $ARG1$              $ARG2$ ARG3$
        }

define command {
        command_name   check_nrpe_aix_cpu_stats
        command_line    $USER1$/check_nrpe -p $USER11$ -H $HOSTADDRESS$ -a $ARG1$ $ARG2$
        }

Теперь, если вы запустите:

awk 'BEGIN {OFS=""} {if ($0 ~ /check_nrpe_aix/) print $0,"_SOMESTRING";else print $0}' input.txt

, вы должны получить ожидаемый результат:

$ awk 'BEGIN {OFS=""} {if ($0 ~ /check_nrpe_aix/) print $0,"_SOMESTRING";else print $0}' input.txt
define command {
        command_name    check_nrpe_aix_load_SOMESTRING
        command_line    $USER1$/check_nrpe -p $USER11$ -H $HOSTADDRESS$ -a $ARG1$ $ARG2$ ARG3$
        }

define command {
        command_name   check_nrpe_aix_cpu_stats_SOMESTRING
        command_line    $USER1$/check_nrpe -p $USER11$ -H $HOSTADDRESS$ -a $ARG1$ $ARG2$
        }

Разбивка:

OSF - это разделитель выходного поля. Я установил его пустым, чтобы он не добавлял пробел при добавлении «_SOMESTRING» в строку

Команда

if ($0 ~ /check_nrpe_aix/) print $0,"_SOMESTRING";

будет искать выражение «check_nrpe_aix» и печататьцелая строка ($ 0) плюс «_SOMESTRING», разделенные OSF

Команда, иначе выведите $ 0}

, чтобы напечатать всю строку без изменений, если она не соответствует условию предыдущей команды

0 голосов
/ 07 октября 2019

Это может работать для вас (GNU sed):

sed 's/\<check_nrpe_aix\S*/&_SOMETHING/g' file

Добавить _SOMETHING к любому слову, начинающемуся check_nrpe_aix.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...