首页 > 解决方案 > 将字符串附加到以某些字符开头的每个匹配模式

问题描述

我正在尝试使用 awk 或 sed 将字符串“_SOMETHING”附加到以“check_nrpe_aix”开头的文件中的每个现有字符串

前 :

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$
    }

标签: linuxbashshellawksed

解决方案


我将您的示例放在名为 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) 加上由 OSF 分隔的“_SOMESTRING”

命令 ;else print $0}

如果与前一个命令的条件不匹配,将打印整行而不作任何更改


推荐阅读