linux的scan命令
Linux下scan命令主要是以scanf的形式使用轉(zhuǎn)換符解析字符串,下面由學習啦小編為大家整理了linux下scan命令的相關(guān)知識,希望對大家有幫助!
linux的scan命令詳解
scan - 以sscanf的形式使用轉(zhuǎn)換符解析字符串
語法:
scan string format ?varName varName ...?
介紹:
scan命令根據(jù)format的格式解析string并給varName賦值,返回成功轉(zhuǎn)換的次數(shù)。如果沒有提供varName,將以列表形式返回scan匹配值
scan命令和format命令類似.支持的轉(zhuǎn)換字符如下:
d
輸入必須為一個十進制整數(shù)。其被讀入并以十進制字符串方式存入變量。如果提供l或者L此類修改器字符,則掃描的值將以64-bit形式表示
o
輸入必須為一個八進制整數(shù)。其被讀入并以十進制字符串方式存入變量。如果提供l或者L此類修改器字符,則掃描的值將以64-bit形式表示。如果其值超過MAX_INT(當沒有l(wèi)或者L時,32-bit平臺為017777777777),將被截斷成一個有符號整形數(shù)。因此,037777777777 在32-bit機器上默認將被表示為-1
x
輸入必須為一個十六進制整形數(shù)。其被讀入并以十進制字符串方式存入變量。如果提供l或者L此類修改器字符,則掃描的值將以64-bit形式表示。如果其值超過MAX_INT(當沒有l(wèi)或者L時,32-bit平臺為017777777777),將被截斷成一個有符號整形數(shù)。因此,037777777777 在32-bit機器上默認將被表示為-1
u
輸入必須為一個十進制整形數(shù)。其被讀入并以無符號十進制字符串方式存入變量。如果提供l或者L此類修改器字符,則掃描的值將以64-bit形式表示。
i
輸入必須為一個整形數(shù)。進制取決于如expr描述的方式。其被讀入并以無符號十進制字符串方式存入變量。如果提供l或者L此類修改器字符,則掃描的值將以64-bit形式表示。
c
輸入為單字符其二進制值以十進制字符串形式保存在變量中。初始的空格在這種情況下不會被跳過,所以輸入可以使空格。這個轉(zhuǎn)換不同于ANSI標準(輸入永遠由單字符組成并且沒有指定域?qū)挾?
s
輸入由直到下一個空白符的所有字符組成;字符會復制給變量
e f g
輸入必須為由可選的符號,十進制字符串以及小數(shù)點組成的浮點數(shù),可選的指數(shù)由e或者E后跟可選符號以及十進制字符串。其被讀入并以浮點型字符串方式存入變量。
[chars]
輸入由任意數(shù)目的字符組成。匹配的字符串存在變量中。用于匹配一組某一范圍的字符,用-表示范圍,如果-出現(xiàn)在最先或者最后被當做一個字符
[^chars]
輸入由任意數(shù)目的字符組成。匹配的字符串存在變量中。用于匹配一組某一范圍的字符以外的部分,用-表示范圍,如果-出現(xiàn)在最先或者最后被當做一個字符
n
不輸入任何字符。掃描字符的總數(shù)取自最近掃描后所存儲的變量
linux的scan命令實例
將一個簡單的顏色代碼(#RRGGBB方式)解析為不同域的值
set string "#08D03F"
scan $string "#%2x%2x%2x" r g b
解析HH:MM時間字符串,注意避免通過強制轉(zhuǎn)換十進制而帶來的八進制數(shù)問題
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轉(zhuǎ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"