使用sed更改常量后的第二个单词

时间:2012-08-27 15:29:28

标签: sed

这应该很简单,但我似乎无法正确使用语法。 我有一个包含以下行的文件: 主持'reg''PROC''admin''EIFEBJFFBOENGKGF'

主机是不加引号的,是唯一的常量。我想知道的其他值不知道确切的值。我想要做的是用单引号替换第一个单词,在这种情况下'reg'用新值替换,并保留原来的其余部分。我尝试了很多变化:

回声“主持'reg''NCO_PA''bsmadmin''EIFEBJFFBOENGKGF'”| sed“/ host / s / ['*'] /'newvalue'/”

主持人'newvalue'reg''NCO_PA''bsmadmin''EIFEBJFFBOENGKGF'

回声“主持'reg''NCO_PA''bsmadmin''EIFEBJFFBOENGKGF'”| sed“/ host / s / [\'。\'] / \'newvalue \'/”

主持人'newvalue'reg''NCO_PA''bsmadmin''EIFEBJFFBOENGKGF'

似乎我只是用它来替换第一个sigle引号。所以我的目标是改变

主持人'reg''PROC''admin''EIFEBJFFBOENGKGF'

主持人'newvalue''PROC''admin''EIFEBJFFBOENGKGF'

第二个字段的值将是主机名,因此它可能包含对主机名有效的任何字符,reg.test.com,reg-1.test.com,boo.radley.com等。被单引号包围。

提前致谢。

2 个答案:

答案 0 :(得分:1)

echo "host 'reg' 'NCO_PA' 'bsmadmin' 'EIFEBJFFBOENGKGF'" | \
   sed "s/^host\s*'[^']*'/host 'newval'/"

答案 1 :(得分:1)

这可能适合你(GNU sed):

sed 's/'\''[^'\'']*'\''/'\''new value'\''/' file

或:

new_value='a new value'
sed 's/'\''[^'\'']*'\''/'\''"$new_value"'\''/' file