我在shell中有一个变量
vpp_dpdk_dev_conf="dev='name=a,pci=2,mtu=1400,num-rx-queues=64,num-tx-queues=64,num-rx-desc=8,num-tx-desc=8,skip=false|true
现在我有另一个文件,其中pci将目前,作为一个样本
pci 2 {
num-rx-queues 30
num-tx-queues 17
}
现在,如果我的pci值存在,那么我需要用当前的env变量替换当前的任何值,如果不存在,则添加它们。
现在这个pci可以有多个示例,但需要替换哪个匹配pci x
我正在解析整个字符串并删除“=”,因为在最终文件中它不会出现。
function conf_file_update()
{
for param in $@
do
name=${param%%=*}
value=${param#*=}
echo "value final" $value
if [ "$name" == "pci" ]; then
named_param="$name $value"
VAR=$(grep -n "${named_param}" $CONF_FILE_PATH | cut -d : -f 1)
VAR=$(($VAR+1))
echo $VAR
sed -i '$VAR,$s/^ '"${name}"' [0-9]*/ '"${name}"' '"${value}"'/' $CONF_FILE_PATH
fi
done
}
read ra DEV <<< $vpp_dpdk_dev_conf
for i in "${DEV[@]}"; do
#if [[ -f $i ]] && [[ -w $i ]]; then
for param in $(IFS='=';echo $i); do
echo $i
name=${param%% *}
value=${param#* }
if [ "$name" == "pci" ]; then
conf_file_update $DEV
exit 0
在sed命令中,我试图传递应该开始替换的行号,但sed没有接受$VAR并说
未知命令:V字
任何建议的方法在这个问题是高度赞赏。谢谢Niladri
1条答案
按热度按时间tgabmvqs1#
将
$VAR
和所有sed
表达式放在"
(而不是'
)之间。其中: