我通过shell命令保存了一个值: 例如:
timeoutvalue=`echo "timeout=2.0"`
我必须从另一个文本中获取超时值,并将其替换为此超时值。 例如,文本是egtest:
<host ip="255.255.255.0" name="testhost" description="hostfortest" connection="xmlrpc" timeout=4.0/>
我想从上面的文本中获取超时值,并将timeout=4.0
的值替换为timeout=2.0
(我通过shell命令保存为变量的值)。
我的问题是: (1)对于一个简单的测试,我想用$ timeoutvalue替换timeout = 4.0的值。 所以我的命令是:
sed 's/timeout=4.0/$timeoutvalue/g' egtext
。
但似乎文字变成了:
<host ip="255.255.255.0" name="testhost" description="hostfortest" connection="xmlrpc" $timeoutvalue/>
有人可以告诉我为什么这是错的吗?
(2)对于这个问题,我必须首先从文本中grep timeout=4.0
,并将值4.0
替换为保存的变量值(在我的示例中:2.0)。
我想但我不知道用哪个命令来实现这个(awk?sed?)
因为文本的字段不确定(例如,在本文中,超时在$5
,但可能在另一个文本中,它可能会更改为$6
)。我的意思是它可能会变成:
<host ip="255.255.255.0" name="testhost" description="hostfortest" connection="xmlrpc" type="onebox" timeout=4.0/>
有人可以帮我吗?
答案 0 :(得分:2)
单引号不允许变量插值,因此请使用双引号:
sed "s/timeout=4.0/$timeoutvalue/g" egtext
编辑:
考虑
who='world'
echo "Hello $who" # prints Hello world
echo 'Hello $who" # prints Hello $who
如单引号所示,不允许变量替换。它将$who
字面上视为一美元,然后是who
。但双引号的行为有所不同,当它看到$who
时,它意识到who
是一个变量,并将$who
替换为其值。
答案 1 :(得分:1)
单引号禁止变量扩展。
sed 's/timeout=4.0/'"$timeoutvalue"'/g' egtext
答案 2 :(得分:1)
我会将您的代码编写如下。
timeoutvalue='timeout=2.0'
sed "s/timeout=[.0-9]*/${timeoutvalue}/" egtext