我的文件数据模式如下,我需要根据变量值 eth0 和 eth1 输出 6 或 3 或 8 或 4
eth0RX:6:eth0TX:3|eth1RX:8:eth1TX:4|
下面的代码运行良好
sed 's/.*eth0RX:\([0-9]\+\).*/\1/g' $EMSTATE/packetdrop.txt
但是当我使用像下面这样的动态变量时会失败
rxfile=sed 's/.*$iRX:\([0-9]\+\).*/\1/g' $EMSTATE/packetdrop.txt
答案1
- 在单引号内,一切都是这样。
$i
是一个美元符号,后跟一个i
。如果你想使用变量,你必须将字符串放入双引号中,有点像这样:“s/.*$iRX:\([0-9]\+\).*/\1/g”
- 但这是行不通的,因为它会寻找一个名为 的变量
iRX
。解决这个问题的最简单方法是将变量名称放在大括号中,如下所示:"s/.*${i}RX:\([0-9]\+\).*/\1/g"
- 您
$EMSTATE
也应该放入双引号。您可以使用"$EMSTATE"/packetdrop.txt
或"$EMSTATE/packetdrop.txt"
,无论您喜欢哪个。
答案2
单引号中不会发生变量扩展。请改用双引号。如果要将结果设置为变量,则需要sed
在命令替换语法中运行$(...)
,并且最好也引用它"$(...)"
。另外 as$iRX
可以是一个有效的变量名,最好这样做${i}
。
rxfile="$(sed "s/.*${i}RX:\([0-9]\+\).*/\1/g" "$EMSTATE/packetdrop.txt" )"