我正在编写一个 csh 脚本,需要将字符串中的数值分配给一个变量
这是字符串值的示例:“pkt_size=78”
除了数字之外,字符串中的字符将始终相同。
我非常需要提取“=”符号之后的值。
我可以使用什么 Unix 命令来执行此操作?
谢谢,
我正在编写一个 csh 脚本,需要将字符串中的数值分配给一个变量
这是字符串值的示例:“pkt_size=78”
除了数字之外,字符串中的字符将始终相同。
我非常需要提取“=”符号之后的值。
我可以使用什么 Unix 命令来执行此操作?
谢谢,
% set var = pkt_size=78
% set num = `echo $var | sed 's/.*=//'`
% echo $num
78
或者,如果您使用的是 tcsh(不是纯 csh)并且前缀是固定字符串:
% set var = pkt_size=78
% set num = $var:s/pkt_size=//
% echo $num
78
快速破解...
$ NUMBER=`echo pkt_size=78 | sed -e 's/pkt_size=\(\d*\)/\1/'`
C-shell 没有字符串操作工具。相反,我们主要使用 echo 命令和 awk 实用程序。后者有自己的文本处理语言,您可以编写 awk 脚本来执行复杂的处理,通常来自文件。甚至还有专门介绍 awk 的书籍,例如 Dale Dougherty 的简明标题 sed & awk(O'Reilly & Associates,1990)。当然,详细的描述远远超出了这本食谱的范围。
一个awk
黑客会是这样的:
set var=`echo "$var" | awk -F= '{print $2}'`
如果必须使用 csh,可以使用内置修饰符。
% set v=pkt_size=78
% echo $v:s/pkt_size=//
78
这可能特定于 tcsh。
但是确实有很多理由使用 bourne shell 衍生物(sh、ksh、bash)来代替。