1

这应该很容易,但我似乎无法获得正确的语法。我有一个包含以下行的文件: host 'reg' 'PROC' 'admin' 'EIFEBJFFBOENGKGF'

host 未加引号,是唯一的常量。其他被引用的值我不知道它的确切值。我想要做的是用单引号替换第一个单词,在这种情况下,'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'

看来我只是让它用值替换第一个单引号。所以我的目标是改变

主机 'reg' 'PROC' 'admin' 'EIFEBJFFBOENGKGF'

主机'newvalue''PROC''admin''EIFEBJFFBOENGKGF'

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

提前致谢。

4

2 回答 2

1

这可能对您有用(GNU sed):

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

或者:

new_value='a new value'
sed 's/'\''[^'\'']*'\''/'\''"$new_value"'\''/' file
于 2012-08-27T15:58:50.513 回答
1
echo "host 'reg' 'NCO_PA' 'bsmadmin' 'EIFEBJFFBOENGKGF'" | \
   sed "s/^host\s*'[^']*'/host 'newval'/"
于 2012-08-27T15:32:35.157 回答