Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用sed更改常量后的第二个单词_Sed - Fatal编程技术网

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

使用sed更改常量后的第二个单词,sed,Sed,这应该很容易,但我似乎无法得到正确的语法下来。 我有一个包含以下行的文件: 主机'reg''进程''管理员'EIFEBJFFBOENGKGF' host是不带引号的,并且是唯一的常量。我不知道qouted的其他值的确切值。我要做的是用一个新值替换单引号中的第一个单词,在本例中是“reg”,并保持行的其余部分不变。我尝试了多种变体: 回显“主机注册表”“NCO\u PA”“bsmadmin”“EIFEBJFFBOENGKGF”“sed”/host/s/['*']/'newvalue'/' 主机“n

这应该很容易,但我似乎无法得到正确的语法下来。 我有一个包含以下行的文件: 主机'reg''进程''管理员'EIFEBJFFBOENGKGF'

host是不带引号的,并且是唯一的常量。我不知道qouted的其他值的确切值。我要做的是用一个新值替换单引号中的第一个单词,在本例中是“reg”,并保持行的其余部分不变。我尝试了多种变体:

回显“主机注册表”“NCO\u PA”“bsmadmin”“EIFEBJFFBOENGKGF”“sed”/host/s/['*']/'newvalue'/'

主机“newvalue”注册表“NCO_PA”bsmadmin“EIFEBJFFBOENGKGF”

回显“主机注册”“NCO\U PA”“bsmadmin”“EIFEBJFFBOENGKGF”“sed”/host/s/[\'.\']/\'newvalue\'/”

主机“newvalue”注册表“NCO_PA”bsmadmin“EIFEBJFFBOENGKGF”

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

主机'reg''进程''管理员'EIFEBJFFBOENGKGF'

主机“newvalue”进程“admin”EIFEBJFFBOENGKGF

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

提前谢谢

这可能适合您(GNU-sed):

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

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