linux的scan命令

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"

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部