是否有办法替换多个捕获的组,并将其替换为=
中键值格式(由sed
分隔)的捕获组的值 ?
抱歉,这个问题令人困惑,所以这里有一个例子
我有什么:
aaa="src is $src$ user is $user$!" src="over there" user="jason"
最终我想要的是什么:
aaa="src is over there user is jason!"
我不想硬编码$var$
的位置,因为它们可能会改变。
答案 0 :(得分:1)
这是一个快速的&使用perl解决问题的肮脏方法。它可能在某些方面失败(空格,转义双引号,......),但它可以完成大多数简单情况的工作:
perl -ne '
## Get each key and value.
@captures = m/(\S+)=("[^"]+")/g;
## Extract first two elements as in the original string.
$output = join q|=|, splice @captures, 0, 2;
## Use a hash for a better look-up, and remove double quotes
## from values.
%replacements = @captures;
%replacements = map { $_ => substr $replacements{$_}, 1, -1 } keys %replacements;
## Use a regex to look-up into the hash for the replacements strings.
$output =~ s/\$([^\$]+)\$/$replacements{$1}/g;
printf qq|%s\n|, $output;
' infile
它产生:
aaa="src is over there user is jason!"
答案 1 :(得分:1)
sed ':again
s/\$\([[:alnum:]]\{1,\}\)\$\(.*\) \1="\([^"]*\)"/\3\2/g
t again
' YourFile
如你所见,sed绝对没有兴趣做这种任务......即使在几行上使用元素,它也可以进行少量修改,并且它不需要快速一个较为复杂的高级语言的复杂系列。 / p>
普林西: