linux的scan命令
Linux下scan命令主要是以scanf的形式使用转换符解析字符串,下面由学习啦小编为大家整理了linux下scan命令的相关知识,希望对大家有帮助!
linux的scan命令详解
scan - 以sscanf的形式使用转换符解析字符串
语法:
scan string format ?varName varName ...?
介绍:
scan命令根据format的格式解析string并给varName赋值,返回成功转换的次数。如果没有提供varName,将以列表形式返回scan匹配值
scan命令和format命令类似.支持的转换字符如下:
d
输入必须为一个十进制整数。其被读入并以十进制字符串方式存入变量。如果提供l或者L此类修改器字符,则扫描的值将以64-bit形式表示
o
输入必须为一个八进制整数。其被读入并以十进制字符串方式存入变量。如果提供l或者L此类修改器字符,则扫描的值将以64-bit形式表示。如果其值超过MAX_INT(当没有l或者L时,32-bit平台为017777777777),将被截断成一个有符号整形数。因此,037777777777 在32-bit机器上默认将被表示为-1
x
输入必须为一个十六进制整形数。其被读入并以十进制字符串方式存入变量。如果提供l或者L此类修改器字符,则扫描的值将以64-bit形式表示。如果其值超过MAX_INT(当没有l或者L时,32-bit平台为017777777777),将被截断成一个有符号整形数。因此,037777777777 在32-bit机器上默认将被表示为-1
u
输入必须为一个十进制整形数。其被读入并以无符号十进制字符串方式存入变量。如果提供l或者L此类修改器字符,则扫描的值将以64-bit形式表示。
i
输入必须为一个整形数。进制取决于如expr描述的方式。其被读入并以无符号十进制字符串方式存入变量。如果提供l或者L此类修改器字符,则扫描的值将以64-bit形式表示。
c
输入为单字符其二进制值以十进制字符串形式保存在变量中。初始的空格在这种情况下不会被跳过,所以输入可以使空格。这个转换不同于ANSI标准(输入永远由单字符组成并且没有指定域宽度)
s
输入由直到下一个空白符的所有字符组成;字符会复制给变量
e f g
输入必须为由可选的符号,十进制字符串以及小数点组成的浮点数,可选的指数由e或者E后跟可选符号以及十进制字符串。其被读入并以浮点型字符串方式存入变量。
[chars]
输入由任意数目的字符组成。匹配的字符串存在变量中。用于匹配一组某一范围的字符,用-表示范围,如果-出现在最先或者最后被当做一个字符
[^chars]
输入由任意数目的字符组成。匹配的字符串存在变量中。用于匹配一组某一范围的字符以外的部分,用-表示范围,如果-出现在最先或者最后被当做一个字符
n
不输入任何字符。扫描字符的总数取自最近扫描后所存储的变量
linux的scan命令实例
将一个简单的颜色代码(#RRGGBB方式)解析为不同域的值
set string "#08D03F"
scan $string "#%2x%2x%2x" r g b
解析HH:MM时间字符串,注意避免通过强制转换十进制而带来的八进制数问题
set string "08:08" ;# *Not* octal!
if {[scan $string "%d:%d" hours minutes] != 2} {
error "not a valid time string"
}
# We have to understand numeric ranges ourselves...
if {$minutes < 0 || $minutes > 59} {
error "invalid number of minutes"
}
将一个字符串分解成非空格字符的一系列集合(注意使用%n转换使得能够跳过第一个空格的字符)
set string " a string {with braced words} + leading space "
set words {}
while {[scan $string %s%n word length] == 2} {
lappend words $word
set string [string range $string $length end]
}
解析一个简单的坐标字符串,通过查找显式终止字符检查是否完成
set string "(5.2,-4e-2)"
# Note that the spaces before the literal parts of
# the scan pattern are significant, and that ")" is
# the Unicode character \u0029
if {
[scan $string "(%f,%s %c" x y last] != 3
|| $last != 0x0029
} then {
error "invalid coordinate string"
}
puts "X=$x, Y=$y"