使用 sed 查找一个词并在匹配词的末尾附加一个后缀

using sed find a word and append a suffix at the end of the matched word

我在文件中有一些文本如下所示:

'PALAL_3002_NEP_POLICIES':
 Name: SomeRandomName:Here
 Desc: "Random description here"
 Chart Name: palal
 Labels:
 - Label1: '#AL_RAND_DUMMY_PAL_PSA_NEP_POLICY'
 - Label2: '#AL_RAND_DUMMY_SER_PSA_NEP_POLICY-DUMMY_SER_PAL_NEP'
 - Label3: '#AL_RAND_DUMMY_PAL_PSA_NEP_POLICY-DUMMY_SER_NEG_NEP'
 - Label4: '#AL_RAND_DUMMY_PAL_PSA_NEP_POLICY-#AL_RAND_DUMMY_PAL_PSA_NEP_POLICY'

我想找到一个包含大写字母字符串 PAL 的单词,并为匹配的单词添加后缀 _MATCH。字符串 PAL 可以存在于一个没有连字符的单词中,或者以连字符分隔。

预期输出:

'PALAL_3002_NEP_POLICIES_MATCH': 
 Name: SomeRandomName:Here
 Desc: "Random description here"
 Chart Name: palal
 Labels:
 - Label1: '#AL_RAND_DUMMY_PAL_PSA_NEP_POLICY_MATCH'
 - Label2: '#AL_RAND_DUMMY_SER_PSA_NEP_POLICY-DUMMY_SER_PAL_NEP_MATCH'
 - Label3: '#AL_RAND_DUMMY_PAL_PSA_NEP_POLICY_MATCH-DUMMY_SER_NEG_NEP'
 - Label4: '#AL_RAND_DUMMY_PAL_PSA_NEP_POLICY_MATCH-#AL_RAND_DUMMY_PAL_PSA_NEP_POLICY_MATCH'

这就是我所做的,但它为每个单词添加了后缀 _MATCH:

sed '/PAL/s/\>/_MATCH/g' practice.txt

如有任何帮助,我们将不胜感激。

使用sed

$ sed "/PAL/s/\(.*\)\('\)/_MATCH/" input_file
'PALAL_3002_NEP_POLICIES_MATCH':
 Name: SomeRandomName:Here
 Desc: "Random description here"
 Chart Name: palal
 Labels:
 - Label: '#AL_RAND_DUMMY_PAL_PSA_NEP_POLICY_MATCH'

如果您要附加的文本仅包含大写字符、数字和下划线,您可以使用以下内容:

sed 's/\(PAL[A-Z_0-9]*\)/_MATCH/g' foo
       \(             \)                    #capturing group
         PAL                                #literal text
            [A-Z_0-9]                       #character class, any of the contained characters
                     *                      #quantifier, match previous expression between 1 to infinity times
                                          #backreference to the first capturing group
                           _MATCH           #literal text, suffix

示例:

╰─$ sed 's/\(PAL[A-Z_0-9]*\)/_MATCH/g' foo

'PALAL_3002_NEP_POLICIES_MATCH':
 Name: SomeRandomName:Here
 Desc: "Random description here"
 Chart Name: palal
 Labels:
 - Label: '#AL_RAND_DUMMY_PAL_PSA_NEP_POLICY_MATCH'