使用 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'
我在文件中有一些文本如下所示:
'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'