有時爬蟲中提取的文本中存在大量的 ,這些顯示為空格,但是無法用 "\r" "\t" 或者 [space] 空格進行替換,這些文本在運算中會報錯,因此需要提取其中的數字和字母。
此類問題的報錯信息通常為標准輸入不合法的字符,例如:
(standard_in) 1: illegal character: \302
(standard_in) 2: syntax error
從字符串中提取數字字母的方法有三,grep命令sed命令和awk均可
sed命令提取字母和數字:使用正則表達式
1 #/bin/bash 2 #正則表達式寫在[]里,^代表非 3 echo " 0ab12 AB34 Cc " | sed 's/[^0-9]//g' 4 #輸出 01234 5 echo " 0ab12 AB34 Cc " | sed 's/[^a-z]//g' 6 #輸出 abc 7 echo " 0ab12 AB34 Cc " | sed 's/[^a-zA-Z]//g' 8 #輸出 abABCc 9 echo " 0ab12 AB34 Cc " | sed 's/[0-9]//g' 10 #輸出 ” ab AB Cc “,輸出內容包含空格
grep命令提取小數:
1 #/bin/bash 2 #轉化為提取小數點兩側的整數 3 echo " *3.2-& " | grep -oP '\d*\.\d+' 4 #輸出 3.2
awk命令提取:按位篩選
注意awk的F選項和雙引號之間有一個空格!!!
1 #/bin/bash 2 #awk的F空選項表示按位分析,正則表達式同上 3 echo 'dsFUs34tg*fs5a%8ar%$#@' | awk -F "" ' 4 { 5 for(i=1;i<=NF;i++) 6 { 7 if ($i ~ /[^0-9a-zA-Z]/) 8 { 9 str=$i 10 str1=(str1 str) 11 } 12 } 13 print str1 14 }' 15 16 #輸出 *%%$#@
